|  | // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | class A { | 
|  | void foo() {} | 
|  | } | 
|  |  | 
|  | abstract class B extends A { | 
|  | // If this class were concrete, there would be a problem, since `new | 
|  | // B().foo(42)` would be statically allowed, but would lead to invalid | 
|  | // arguments being passed to A.foo.  But since the class is abstract, there is | 
|  | // no problem. | 
|  | void foo([x]); | 
|  | } | 
|  |  | 
|  | class C extends B { | 
|  | void foo([x]) { | 
|  | // But it is a problem to try to pass `x` along to super, since the super | 
|  | // method is A.foo. | 
|  | super.foo(/*@compile-error=unspecified*/ x); | 
|  | } | 
|  | } | 
|  |  | 
|  | void f(B b) { | 
|  | b.foo(42); | 
|  | } | 
|  |  | 
|  | main() { | 
|  | f(new C()); | 
|  | } |