/*****************************************************/ // INHERIT2 // Original author: David Schwartz, dis@cs.cornell.edu // Updated by: Kiri Wagstaff, wkiri@cs.cornell.edu // The following code demonstrates how a subclass // defines constructors. class C { public int x, y=10; public C(int x) { this.x = x; System.out.println("x (C): "+x); System.out.println("y (C): "+y); } } class D extends C { public int z=100; public D(int x) { super(x-1); System.out.println("x (D): "+x); System.out.println("y (D): "+y); System.out.println("z (D): "+z); } } public class Inherit2 { public static void main(String[] args) { // This creates a C object System.out.println("\nTest 1:"); C v1 = new C(2); System.out.println("v1 uses "+v1.getClass()); System.out.println("accessing x: "+v1.x); // This creates a D object System.out.println("\nTest 2:"); D v2 = new D(2); System.out.println("v2 uses "+v2.getClass()); System.out.println("accessing x: "+v2.x); // Even if we store a D in a C variable, // D still gets printed out as a D System.out.println("\nTest 3:"); C v3 = new D(2); System.out.println("v3 uses "+v3.getClass()); System.out.println("accessing x: "+v3.x); // But we cannot store a C object in a D variable // D v4 = new C(2); } } /* sample output: Test 1: Test 2: Test 3: x (C): 2 x (C): 1 x (C): 1 x (C): 10 y (C): 10 y (C): 10 x (D): 2 x (D): 2 y (D): 10 y (D): 10 z (D): 100 z (D): 100 v1 uses class C v2 uses class D v3 uses class D accessing x: 2 accessing x: 1 accessing x: 1 */