- 加油~之後,天天要作的事情,只在該作的時間段作
如下代碼執行的結果顯示是多少( )?java
public class Demo { class Super { int flag = 1; Super() { test(); } void test() { System.out.println("Super.test() flag=" + flag); } } class Sub extends Super { Sub(int i) { flag = i; System.out.println("Sub.Sub()flag=" + flag); } void test() { System.out.println("Sub.test()flag=" + flag); } } public static void main(String[] args) { new Demo().new Sub(5); } }
正確答案: A 你的答案: D (錯誤)
A: Sub.test() flag=1
Sub.Sub() flag=5
B: Sub.Sub() flag=5
Sub.test() flag=5
C: Sub.test() flag=0
Sub.Sub() flag=5
D: Super.test() flag=1
Sub.Sub() flag=5函數
在繼承中代碼的執行順序爲: 1.父類靜態對象,父類靜態代碼塊 2.子類靜態對象,子類靜態代碼塊 3.父類非靜態對象,父類非靜態代碼塊 4.父類構造函數 5.子類非靜態對象,子類非靜態代碼塊 6.子類構造函數 對於本題來講:在只想new Sub(5)的時候,父類先初始化了 int flag = 1,而後執行父類的構造函數Super(),父類構造函數中執行的test()方法,因子類是重寫了test()方法的,所以父類構造函數中的test()方法實際執行的是子類的test()方法,因此輸出爲Sub.test() flag=1,接着執行子類構造函數Sub(5) 將flag賦值爲5,所以輸出結果Sub.Sub() flag=5。最終選擇了A。
下列Java代碼中的變量a、b、c分別在內存的____存儲區存放。線程
class A { private String a = 「aa」; public boolean methodB() { String b = 「bb」; final String c = 「cc」; } }
正確答案: C
A 堆區、堆區、堆區
B 堆區、棧區、堆區
C 堆區、棧區、棧區
D 堆區、堆區、棧區
E 靜態區、棧區、堆區
F 靜態區、棧區、棧區code
堆區:只存放類對象,線程共享; 方法區:又叫靜態存儲區,存放class文件和靜態數據,線程共享; 棧區:存放方法局部變量,基本類型變量區、執行環境上下文、操做指令區,線程不共享;
Java語言中,方法的重寫(Overriding)和重載(Overloading)是多態性的不一樣表現。下邊哪些說法是對的?
正確答案: A C
A 重寫是父類與子類之間多態性的一種表現
B 重寫是一個類中多態性的一種表現
C 重載是一個類中多態性的一種表現
D 重載是父類與子類之間多態性的一種表現對象
重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。 Overloaded的方法是能夠改變返回值的類型。