下面幾行代表什麼意思?Java類,帶有新的繼承構造函數
superclass sc = new subclass();
subclass sc = new superclass();
我在計算機科學書中看到的第一行,我不知道這意味着什麼。 超級類如何檢測新的子類構造函數? 第二行它如何工作?我認爲這個子類不會繼承超類的構造函數?
OOP和混淆新。
下面幾行代表什麼意思?Java類,帶有新的繼承構造函數
superclass sc = new subclass();
subclass sc = new superclass();
我在計算機科學書中看到的第一行,我不知道這意味着什麼。 超級類如何檢測新的子類構造函數? 第二行它如何工作?我認爲這個子類不會繼承超類的構造函數?
OOP和混淆新。
簡單 - 第二行不編譯。 (提示:寫下來,下次試試。)
第一行是有意義的。也許用這種方式閱讀會更有幫助?
superclass sup;
subclass sub = new subclass();
sup = sub;
在任何情況下,請注意,您只是普通的老使一個子類。然後你可以在超類的引用中保持它,因爲子類是超類的實例。
注意這裏有什麼都沒有做構造函數繼承。構造函數是從來沒有繼承。
也許一個例子可以幫助你。想想你的2行那樣:
//Student extends Person
Person p = new Student();
Student s = new Person();
你可以很容易地看到,第一行是正確becase的一個學生是一個人。 但不是全部人是學生,所以這就是爲什麼第二行是錯誤的。
第二行給出編譯錯誤是正確的。
在第一行中,超類保留了子類的實例。在這裏我們可以看到「是」的關係。例如
class Animal {}
class Dog extends Animal {}
class TestCode {
public static void main(String[] args) {
Animal a=new Dog(); // here a contains the instance of Dog
}
}
第二行不應該編譯... – assylias 2013-05-06 23:37:58
開爾文,您的懷疑是正確的。它不能!構造函數不會被繼承。只有受保護的公共財產纔可以。 – 2013-05-06 23:39:03
@RaviTrivedi它與「構造函數不被繼承」無關。大衆汽車(小類)是一輛車(超級車)。所有大衆汽車都是汽車,所以你可以把大衆汽車的參考作爲汽車的參考。並非所有的車輛都是大衆汽車,所以您不能將參考車輛作爲大衆的參考。 – SJuan76 2013-05-06 23:53:59