【317天】我愛刷題系列076(2017.12.19)

叨叨兩句

  1. 加油~之後,天天要作的事情,只在該作的時間段作

牛客網——java專項練習055

1

如下代碼執行的結果顯示是多少( )?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。

2

下列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文件和靜態數據,線程共享;
棧區:存放方法局部變量,基本類型變量區、執行環境上下文、操做指令區,線程不共享;

3

Java語言中,方法的重寫(Overriding)和重載(Overloading)是多態性的不一樣表現。下邊哪些說法是對的?
正確答案: A C
A 重寫是父類與子類之間多態性的一種表現
B 重寫是一個類中多態性的一種表現
C 重載是一個類中多態性的一種表現
D 重載是父類與子類之間多態性的一種表現對象

重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。
Overloaded的方法是能夠改變返回值的類型。
相關文章
相關標籤/搜索