// 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. // This test exercises a corner case of override checking that is safe from a // soundness perspective, but which we haven't decided whether or not to allow // from a usability perspective. class A { void foo() {} } abstract class I { void foo([x]); } abstract class B extends A implements I { // 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. } class C extends B { void foo([x]) { super.foo(); } } void f(B b) { b.foo(42); } main() { f(new C()); }