| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 interface Interface { | 5 interface Interface { | 
| 6   final x; | 6   final x; | 
| 7 } | 7 } | 
| 8 | 8 | 
| 9 // The abstract keyword is implicit if a class declares an abstract |  | 
| 10 // member. This class does not declare any abstract members, so it |  | 
| 11 // must be marked abstract because it doesn't implement the x getter. |  | 
| 12 abstract class Abstract implements Interface { | 9 abstract class Abstract implements Interface { | 
| 13   String toString() => x.toString(); | 10   String toString() => x.toString(); | 
| 14 } | 11 } | 
| 15 | 12 | 
| 16 // This class does not implement "x" either, but it is not marked | 13 // This class does not implement "x" either, but it is not marked | 
| 17 // abstract. | 14 // abstract. | 
| 18 class SubAbstract1 extends Abstract { } /// 01: static type warning | 15 class SubAbstract1 extends Abstract { } /// 01: static type warning | 
| 19 | 16 | 
| 20 // This class is implicitly abstract as it declares an abstract getter | 17 // This class is implicitly abstract as it declares an abstract getter | 
| 21 // method. | 18 // method. | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 32 } | 29 } | 
| 33 | 30 | 
| 34 class SubConcrete extends Concrete { | 31 class SubConcrete extends Concrete { | 
| 35   final x; | 32   final x; | 
| 36   SubConcrete(this.x); | 33   SubConcrete(this.x); | 
| 37 } | 34 } | 
| 38 | 35 | 
| 39 void main() { | 36 void main() { | 
| 40   var x = new Abstract(); /// 02: runtime error | 37   var x = new Abstract(); /// 02: runtime error | 
| 41   var y = new SubAbstract1(); /// 01: continued | 38   var y = new SubAbstract1(); /// 01: continued | 
| 42   var z = new SubAbstract2(); /// 03: runtime error | 39   var z = new SubAbstract2(); | 
| 43   var a = new SubSubAbstract2(); /// 04: continued | 40   var a = new SubSubAbstract2(); /// 04: continued | 
| 44   Expect.equals(x, x); /// 02: continued | 41   Expect.equals(x, x); /// 02: continued | 
| 45   Expect.equals('7', new Concrete().toString()); | 42   Expect.equals('7', new Concrete().toString()); | 
| 46   Expect.equals('42', new SubConcrete(42).toString()); | 43   Expect.equals('42', new SubConcrete(42).toString()); | 
| 47   Expect.equals('7', new SubConcrete(new Concrete()).toString()); | 44   Expect.equals('7', new SubConcrete(new Concrete()).toString()); | 
| 48 } | 45 } | 
| OLD | NEW | 
|---|