1. 程式人生 > >Java第二課——多型繼承

Java第二課——多型繼承

Java裡的多型和過載與C++裡的基本一致。 多型指的是子類可以對父類的方法進行重寫,在程式執行時,根據具體的情況(引用物件具體的型別)來選擇呼叫相應的方法。

《HeadFirst ——Java》中的一個練習題,很好的體現多型的關係。

<span style="font-size:18px;">package exercise;
class A {
	int var = 6;
	void m1() {
		System.out.print("A'm1,  ");
	}
	void m2() {
		System.out.print("A'm2,  ");
	}
	void m3() {
		System.out.print("A'm3,  ");
	}
}

class B extends A {
	int var = 7; //
	void m2() {
		System.out.print("B'm2,  ");
	}
}

class C extends B {
	int var = 8;
	void m3() {
		System.out.print("C'm3,  ");
		System.out.print(var+7);
	}
}

class PolymorphicTest {
	public static void main(String arg[]) {
		A a = new A ();
		B b = new B();
		C c = new C();
		A a2 = new C();
	//	C c2 = new B();//wrong
		B b2 = new B();
		A a3 = new B();
		
		a.m1();
		a.m2();
		a.m3();
		//putout:A'm1,  A'm2,  A'm3,
		b.m1();
		b.m2();
		b.m3();
		//putout:A'm1,  B'm2,  A'm3,
		c.m1();
		c.m2();
		c.m3();
		//putout:A'm1,  B'm2,  C'm3,  15
		a2.m1();
		a2.m2();
		a2.m3();
		//putout:A'm1,  B'm2,  C'm3,  15
		
		a3.m1();
		a3.m2();
		a3.m3();
		//A'm1,  B'm2,  A'm3,  
		b2.m1();
		b2.m2();
		b2.m3();
		// A'm1,  B'm2,  A'm3,
         System.out.println("------");
    //    A[] array_a = new A();//wrong, array just for primary data
        ArrayList<A> array_a = new ArrayList<A>();
        array_a.add(a);
        array_a.add(b);
        array_a.add(c);
        for(A test:array_a) {
            test.m1();
            test.m2();
            test.m3();
        }
        //A'm1,  A'm2,  A'm3,  A'm1,  B'm2,  A'm3,  A'm1,  B'm2,  C'm3,  15
    }
 }</span>