2013-12-07 142 views
3

是什麼地方是父類和豐田是子類這兩個對象創建的區別...創建對象

汽車T =新豐田() ; 豐田t =新豐田();

(我相信我們不能做這樣的事:豐田T =新車(); ....爲什麼?)

繼承是困惑我,所以是多態...任何幫助將不勝感激

+0

我推薦你閱讀SCJP 1.6程序員+ –

+0

我認爲這是一個認證指南,它可能更先進......我是一名高中學生 –

+0

要理解多態性,你需要一個更完整的例子。如果問題不明確,請參閱下面的答案,並隨時提出更多問題。 –

回答

3

的區別在於對象t的類型:在第一種情況下,只有car的方法是可用的,而在第二種情況下,你也得到了toyota特異性方法,如果有的話。

下面是一個例子:

public class car { 
    public void drive() {...} 
    public void stop() {...} 
} 
public class toyota extends car { 
    public void drive() {... /*toyota-specific code*/} 
    public void stop() {... /*toyota-specific code*/} 
    public void rollUpWindows() {...} 
} 

如果聲明

car c = new toyota(); 

你可以打電話drivestop,但不rollUpWindows。如果您聲明

toyota c = new toyota(); 

您可以調用所有三種方法。

有一個programming to an interfaces的一般概念,它類似於上面的案例#1。

+0

謝謝:)我現在明白了 –

+0

這個概念從我看到的真的很好,但我現在只是爲它加書籤,因爲我還沒有閱讀有關界面...... –

0

在你的例子中,toyota延伸car。這意味着toyota是(或更確切地說,isA)種類的car。每toyota也是car,但不是每個cartoyota(例如,其中一些可能是本田)。

如果t是對car的參考,它可以容納任何類型的car - 豐田,本田,法拉利,你的名字。但是,如果t定義爲toyota,則它不能保留任何舊的car,只是toyota s。

1

創造是一樣的。你如何訪問創建的對象是不同的。讓我們用一個稍微修改例如:

Car c = new(); 
AutomaticTransmissionCar a = new AutomaticTransmissionCar(); 
StandardTransmissionCar s = new StandardTransmissionCar(); 
Car c = new AutomaticTransmissionCar(); 

a.drive(); 
s.drive(); 
c.drive(); 

據推測,一個AutomaticTransmissionCardrive()方法比StandardTransmissionCardrive()方法非常不同。這是多態性的關鍵:當我們呼叫c.drive()時,汽車會自動確定使用正確的drive()方法。 (請注意,這可能不是最好的設計,僅用於說明這裏的概念。)

+0

它確定通過比較簽名? –

+0

@ArnZXY在這個設計中,'drive()'是一個抽象方法,它在'Car'類中用'AutomaticTransmissionCar'和'StandardTransmissionCar'中的實現聲明。爲了多態性起作用,這些簽名必須完全相同。 使用哪個'drive()'方法是在運行時基於變量'c'的*具體類型*確定的。簡而言之,Java知道'c'實際上是'AutomaticTransmissionCar',所以它的'drive()'方法被使用。 –

1

讓我們從第二個創建(這是最簡單的一個)開始: 在這裏,您正在創建一個豐田對象,並且對於您的程序的整個過程,這將是豐田具有所有特定的屬性和方法, /公共財產和保護/公共方法它從汽車INHERITED。

第一個創建也是有效的,但是是polymorfic,缺點是你將無法解決豐田特定的屬性和方法,因爲它只被宣佈爲汽車。然而在內心深處這是一個豐田,所以當你做到這一點

Toyota t2 = (Toyota)t; 

你變(鑄造)到豐田。

第一次創作的原因是豐田也是一輛汽車。另一種方式是行不通的,因爲汽車並不總是豐田汽車,它可以是雷克薩斯的寶馬汽車......因爲編譯器沒有辦法告訴可能是什麼,所以這是不允許的。

小提示:如果繪製繼承樹,繼承很容易。將超類放在頂層和其下的子類等等。 Inhertance作品向下行進,不旅行了

希望這會清除它有點

0

認爲它是這樣的:汽車是一個超和豐田是子類(這意味着它從車繼承),換句話說,它是有道理的說每個豐田汽車都是汽車,但不是說每輛汽車都是豐田汽車。這是兩個類別(豐田IS-A汽車)之間IS-A關係的一個例子。