java基礎面試題之 多態

class A {
	int a = 1;
	double d = 2.0;
	void show() {
		System.out.println("ClassA:a="+a+"\td="+d);
	}

}
class B extends A{
	float a = 3.0f;
	String d = "Javaprogram.";
	void show() {
		super.show();
		System.out.println("ClassB:a="+a+"\td="+d);
	}
	
}

(1)若在應用程序的main方法中有以下語句:
A a = new A();
a.show();
則輸出結果如何?
(2)若在應用程序的main方法中定義類B的對象b:
A b = new B();
b.show();
則輸出結果如何?
(3)若在應用程序的main方法中定義類B的對象b:
B b = new B();
b.show();
則輸出結果如何?

答案:
(1)
ClassA:a=1 d=2.0

(2)
ClassA:a=1 d=2.0
ClassB:a=3.0 d=Javaprogram.

(3)
ClassA:a=1 d=2.0
ClassB:a=3.0 d=Javaprogram.

第(1)題,實例化一個父類的對象,調用的是父類的方法,所以輸出的是父類中的show方法的語句。
第(2)題,父類的引用,子類的實例;
在子類的show方法中用super關鍵字調用了父類的show方法,輸出的是父類show方法原有的變量,雖然子類中也有和父類相同的變量,但是不會發生說子類的變量會改變父類變量的值,因爲在執行父類方法的時候,對子類是不可見的,父類聲明的引用的可見區域是父類的字段和方法,而子類聲明的引用的可見區域是子類和父類中繼承下來的全部字段和方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章