1.為什麼子類的構造方法在執行之前,必須呼叫父類的構造方法?能不能反過來?為什麼不能反過來?
因為構造方法是用來初始化類的成員屬性的,由於子類繼承父類,擁有父類的成員屬性,要對這些屬性賦值,就要通過父類的構造方法。因此不能反過來。
2.何為多型?
物件導向的程式語言中,多型大致分為靜態多型和動態多型。靜態多型又稱為編譯時多型,具體表現為方法的過載。動態多型又稱執行時多型,指利用父類引用子類的物件,並且對子類中已經重寫的同名方法進行呼叫的過程,這個過程中需要動態繫結。比如有乙個類base,類中有方法show(...),由它派生出幾個子類。當base對它子類的物件進行引用,並呼叫這個show(...)方法時,如果該子類沒有重寫show(...)方法,那麼會直接呼叫子類從base類中繼承來的show()方法,但如果子類重寫了這個方法show(...)(注意參數列不能改變),那麼子類中將不在存放那個由父類繼承來的show(...),而是存放已經重寫的這個show(...)方法,這個時候父類會呼叫子類中的show(...)方法。而且最重要的一點是,多型是對於方法而言,與屬性變數一點關係也沒有。換言之
看下面這個例子:
應系主任要求我先**下輸出結果:
parent.printvalue(),myvalue=100
child.printvalue(),myvalue=200
child.printvalue(),myvalue=200
101child.printvalue(),myvalue=200
child.printvalue(),myvalue=201
結果我的**是對的,至於原因上面多型概念解釋的差不多了,總之就是父類引用指向子類物件時,呼叫的方法如果子類未重寫就呼叫父類的,反之相反,對於屬性變數而言沒有多型一說,所以儘管上面的例子中子類child重新定義了乙個重名的屬性變數myvalue,不過parent的myvalue是parent的myvalue,child的myvalue是child的myvalue(就好像你老婆是你老婆,你媽是你爹的老婆一樣),兩個myvalue變數只是乙個覆蓋了另乙個,僅此而已,沒有什麼其他關係,和多型更是八竿子打不著。除非對父類的引用進行強制轉換,比如上面這個例子中main方法中最後兩句。
繼承與多型 動手又動腦
1.首先,第一次執行完源 後 了解到當呼叫乙個子類的構造方法時,它會依次呼叫父類的建構函式。以下是原因 當乙個類繼承了其它類時,在它的建構函式 constructor 中super 必須被首先呼叫,如果super 沒有被呼叫,則編譯器將在建構函式 constructor 的第一行插入對super 的...
動手動腦(繼承與多型)
1.為什麼子類的構造方法在執行之前,必須呼叫父類的構造方法?能不能反過來?為什麼不能反過來?構造方法主要用來建立物件時初始化物件,即為物件變數賦初始值。建立乙個物件,先呼叫構造方法來進行初始化,子類擁有父類的成員變數和方法,如果不調父類的構造方法,則從父類繼承而來的成員變數和方法得不到正確的初始化。...
繼承與多型 動手動腦
1.和測試結果如下 2.我的猜想 parent.printvalue myvalue 100 child.printvalue myvalue 200 parent.printvalue myvalue 101 child.printvalue myvalue 200 child.printvalu...