|  | // Copyright (c) 2012, 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. | 
|  | // Test overriding of fields. | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | class A {} | 
|  |  | 
|  | class B1 extends A {} | 
|  |  | 
|  | class B2 extends A {} | 
|  |  | 
|  | class Super { | 
|  | Super() : super(); | 
|  |  | 
|  | B1 field; | 
|  | } | 
|  |  | 
|  | class Sub extends Super { | 
|  | Sub() : super(); | 
|  |  | 
|  | // Invalid override. The type of 'Sub.field' ('() → A') isn't a subtype of | 
|  | // 'Super.field' ('() → B1'). | 
|  | A field; // //# 00: compile-time error | 
|  | } | 
|  |  | 
|  | class SubSub extends Super { | 
|  | SubSub() : super(); | 
|  |  | 
|  | // B2 not assignable to B1 | 
|  | B2 field; // //# 01: compile-time error | 
|  | } | 
|  |  | 
|  | main() { | 
|  | SubSub val1 = new SubSub(); | 
|  | val1.field = new B2(); //# 02: compile-time error | 
|  | Expect.equals(true, val1.field is B2); //# 02: continued | 
|  |  | 
|  | Sub val2 = new Sub(); | 
|  | val2.field = new A(); //# none: compile-time error | 
|  | Expect.equals(true, val2.field is A); | 
|  | Expect.equals(false, val2.field is B1); | 
|  | Expect.equals(false, val2.field is B2); | 
|  |  | 
|  | Super val3 = new Super(); | 
|  | val3.field = new B1(); | 
|  | Expect.equals(true, val3.field is B1); | 
|  | Expect.equals(false, val3.field is B2); | 
|  | } |