是什麼地方車是父類和豐田是子類這兩個對象創建的區別...創建對象
汽車T =新豐田() ; 豐田t =新豐田();
(我相信我們不能做這樣的事:豐田T =新車(); ....爲什麼?)
繼承是困惑我,所以是多態...任何幫助將不勝感激
是什麼地方車是父類和豐田是子類這兩個對象創建的區別...創建對象
汽車T =新豐田() ; 豐田t =新豐田();
(我相信我們不能做這樣的事:豐田T =新車(); ....爲什麼?)
繼承是困惑我,所以是多態...任何幫助將不勝感激
的區別在於對象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();
你可以打電話drive
和stop
,但不rollUpWindows
。如果您聲明
toyota c = new toyota();
您可以調用所有三種方法。
有一個programming to an interfaces的一般概念,它類似於上面的案例#1。
謝謝:)我現在明白了 –
這個概念從我看到的真的很好,但我現在只是爲它加書籤,因爲我還沒有閱讀有關界面...... –
在你的例子中,toyota
延伸car
。這意味着toyota
是(或更確切地說,isA
)種類的car
。每toyota
也是car
,但不是每個car
是toyota
(例如,其中一些可能是本田)。
如果t
是對car
的參考,它可以容納任何類型的car
- 豐田,本田,法拉利,你的名字。但是,如果t
定義爲toyota
,則它不能保留任何舊的car
,只是toyota
s。
創造是一樣的。你如何訪問創建的對象是不同的。讓我們用一個稍微修改例如:
Car c = new();
AutomaticTransmissionCar a = new AutomaticTransmissionCar();
StandardTransmissionCar s = new StandardTransmissionCar();
Car c = new AutomaticTransmissionCar();
a.drive();
s.drive();
c.drive();
據推測,一個AutomaticTransmissionCar
的drive()
方法比StandardTransmissionCar
的drive()
方法非常不同。這是多態性的關鍵:當我們呼叫c.drive()
時,汽車會自動確定使用正確的drive()
方法。 (請注意,這可能不是最好的設計,僅用於說明這裏的概念。)
它確定通過比較簽名? –
@ArnZXY在這個設計中,'drive()'是一個抽象方法,它在'Car'類中用'AutomaticTransmissionCar'和'StandardTransmissionCar'中的實現聲明。爲了多態性起作用,這些簽名必須完全相同。 使用哪個'drive()'方法是在運行時基於變量'c'的*具體類型*確定的。簡而言之,Java知道'c'實際上是'AutomaticTransmissionCar',所以它的'drive()'方法被使用。 –
讓我們從第二個創建(這是最簡單的一個)開始: 在這裏,您正在創建一個豐田對象,並且對於您的程序的整個過程,這將是豐田具有所有特定的屬性和方法, /公共財產和保護/公共方法它從汽車INHERITED。
第一個創建也是有效的,但是是polymorfic,缺點是你將無法解決豐田特定的屬性和方法,因爲它只被宣佈爲汽車。然而在內心深處這是一個豐田,所以當你做到這一點
Toyota t2 = (Toyota)t;
你變(鑄造)到豐田。
第一次創作的原因是豐田也是一輛汽車。另一種方式是行不通的,因爲汽車並不總是豐田汽車,它可以是雷克薩斯的寶馬汽車......因爲編譯器沒有辦法告訴可能是什麼,所以這是不允許的。
小提示:如果繪製繼承樹,繼承很容易。將超類放在頂層和其下的子類等等。 Inhertance作品向下行進,不旅行了
希望這會清除它有點
認爲它是這樣的:汽車是一個超和豐田是子類(這意味着它從車繼承),換句話說,它是有道理的說每個豐田汽車都是汽車,但不是說每輛汽車都是豐田汽車。這是兩個類別(豐田IS-A汽車)之間IS-A關係的一個例子。
我推薦你閱讀SCJP 1.6程序員+ –
我認爲這是一個認證指南,它可能更先進......我是一名高中學生 –
要理解多態性,你需要一個更完整的例子。如果問題不明確,請參閱下面的答案,並隨時提出更多問題。 –