2013-05-06 46 views
0

下面幾行代表什麼意思?Java類,帶有新的繼承構造函數

superclass sc = new subclass(); 
subclass sc = new superclass(); 

我在計算機科學書中看到的第一行,我不知道這意味着什麼。 超級類如何檢測新的子類構造函數? 第二行它如何工作?我認爲這個子類不會繼承超類的構造函數?

OOP和混淆新。

+0

第二行不應該編譯... – assylias 2013-05-06 23:37:58

+0

開爾文,您的懷疑是正確的。它不能!構造函數不會被繼承。只有受保護的公共財產纔可以。 – 2013-05-06 23:39:03

+3

@RaviTrivedi它與「構造函數不被繼承」無關。大衆汽車(小類)是一輛車(超級車)。所有大衆汽車都是汽車,所以你可以把大衆汽車的參考作爲汽車的參考。並非所有的車輛都是大衆汽車,所以您不能將參考車輛作爲大衆的參考。 – SJuan76 2013-05-06 23:53:59

回答

2

簡單 - 第二行不編譯。 (提示:寫下來,下次試試。)

第一行是有意義的。也許用這種方式閱讀會更有幫助?

superclass sup; 
subclass sub = new subclass(); 
sup = sub; 

在任何情況下,請注意,您只是普通的老使一個子類。然後你可以在超類的引用中保持它,因爲子類超類的實例。

注意這裏有什麼都沒有做構造函數繼承。構造函數是從來沒有繼承。

2

也許一個例子可以幫助你。想想你的2行那樣:

//Student extends Person 

Person p = new Student(); 
Student s = new Person(); 

你可以很容易地看到,第一行是正確becase的一個學生一個。 但不是全部學生,所以這就是爲什麼第二行是錯誤的。

1

第二行給出編譯錯誤是正確的。

在第一行中,超類保留了子類的實例。在這裏我們可以看到「是」的關係。例如

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 
    } 
}