OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 interface Interface { | |
6 final x; | |
7 } | |
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 { | |
13 String toString() => x.toString(); | |
14 } | |
15 | |
16 // This class does not implement "x" either, but it is not marked | |
17 // abstract. | |
18 class SubAbstract1 extends Abstract { } /// 01: static type warning | |
19 | |
20 // This class is implicitly abstract as it declares an abstract getter | |
21 // method. | |
22 class SubAbstract2 extends Abstract { | |
23 abstract get x(); | |
24 } | |
25 | |
26 // This class does not implement "x" either, but it is not marked | |
27 // abstract. | |
28 class SubSubAbstract2 extends SubAbstract2 { } /// 04: static type warning | |
29 | |
30 class Concrete extends Abstract { | |
31 get x() => 7; | |
32 } | |
33 | |
34 class SubConcrete extends Concrete { | |
35 final x; | |
36 SubConcrete(this.x); | |
37 } | |
38 | |
39 void main() { | |
40 var x = new Abstract(); /// 02: static type warning | |
41 var y = new SubAbstract1(); /// 01: continued | |
42 var z = new SubAbstract2(); /// 03: static type warning | |
43 var a = new SubSubAbstract2(); /// 04: continued | |
44 Expect.equals(x, x); /// 02: continued | |
45 Expect.equals('7', new Concrete().toString()); | |
46 Expect.equals('42', new SubConcrete(42).toString()); | |
47 Expect.equals('7', new SubConcrete(new Concrete()).toString()); | |
48 } | |
OLD | NEW |