繼承:
public class ThisIsASubClass extends ThisIsASuperClass{
{
//declare stuff here
Object o = "Let's presume a string is passed";
super(o); //runs the super class (ThisIsASuperClass in this case), sending an object if needed (effectivly running the super class inside of the subclass)
//put the subclass code here
}
一個很好的例子,我發現(這是很長,但我沒有問題,閱讀長的事情,如果你是一個程序員,你也不應該。):
這裏爲可能的實現的自行車類的這是在類呈現和對象的代碼示例課:
public class Bicycle {
// the Bicycle class has
// three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has
// one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has
// four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
類聲明用於山地車類,它是一個子類自行車的可能是這樣的:
public class MountainBike extends Bicycle {
// the MountainBike subclass adds
// one field
public int seatHeight;
// the MountainBike subclass has one
// constructor
public MountainBike(int startHeight,
int startCadence,
int startSpeed,
int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
// the MountainBike subclass adds
// one method
public void setHeight(int newValue) {
seatHeight = newValue;
}
}
山地車繼承所有字段和自行車的方法,並增加了現場seatHeight並設置它的方法。除了構造函數外,就好像你已經從零開始寫了一個新的MountainBike類,有四個字段和五個方法。但是,您不必完成所有的工作。如果Bicycle類中的方法很複雜並花費大量時間進行調試,這將會特別有用。 你可以在子類中做什麼
子類繼承其父類的所有公共和受保護成員,不管子類是什麼包。如果子類與其父類位於同一個包中,它也繼承父級的包 - 私有成員。您可以按原樣使用繼承的成員,替換它們,隱藏它們或用新成員補充它們:
繼承的字段可以像任何其他字段一樣直接使用。 您可以在子類中聲明一個與超類中的名稱相同的字段,從而隱藏它(不推薦)。 您可以在子類中聲明不在超類中的新字段。 繼承的方法可以直接使用。 您可以在與超類中籤名相同的子類中編寫新的實例方法,從而覆蓋它。 您可以在與超類中籤名相同的子類中編寫一個新的靜態方法,從而隱藏它。 您可以在子類中聲明不在超類中的新方法。 您可以編寫一個調用超類的構造函數的子類構造函數,可以隱式地使用或使用關鍵字super。
本課的以下部分將詳細介紹這些主題。 超類中的私有成員
子類不繼承其父類的私有成員。但是,如果超類具有訪問其專用字段的公共或受保護方法,那麼這些也可以由子類使用。
嵌套類可以訪問其封閉類的所有私有成員,包括字段和方法。因此,由子類繼承的公共或受保護的嵌套類可間接訪問超類的所有私有成員。 Casting Objects
我們已經看到,一個對象是從中實例化的類的數據類型。例如,如果我們寫
public MountainBike myBike = new MountainBike();
那麼myBike是MountainBike的類型。
MountainBike是後代從Bicycle和Object。因此,一輛MountainBike是一輛自行車,同時也是一個對象,它可以用於要求Bicycle或Object對象的任何地方。
反過來並不一定是正確的:一輛自行車可能是一輛山地自行車,但並不一定。同樣,一個對象可能是一輛自行車或一輛山地自行車,但並不一定。
在繼承和實現允許的對象中,Casting顯示使用一種類型的對象代替另一種類型的對象。例如,如果我們寫
Object obj = new MountainBike();
然後obj是既一個對象和一個山地(直到與obj分配另一個目的爲不是這樣山地時間)。這被稱爲隱式投射。
如果,另一方面,我們寫
MountainBike myBike = obj;
因爲obj是不知道的編譯器是山地車,我們會得到一個編譯時錯誤。但是,我們可以告訴編譯器,我們承諾分配山地車顯式鑄造OBJ:
MountainBike myBike = (MountainBike)obj;
該投插入obj是否被分配了一個山地車,以便編譯器可以安全地假設obj是一個運行時檢查山地自行車。如果obj在運行時不是Mountainbike,則會拋出異常。 注意:您可以使用instanceof運算符對特定對象的類型進行邏輯測試。這可以幫助您避免由於不正確的轉換造成的運行時錯誤。例如:
if (obj instanceof MountainBike) {
MountainBike myBike = (MountainBike)obj;
}
這裏instanceof運算符驗證OBJ指的是山地車,使我們可以與知識會有不拋出運行時異常的演員。
TL; DR:如果您使用繼承,任何廣場是一個矩形,但不是所有的矩形爲正方形..
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
+1。缺乏隱式複製構造函數,甚至缺乏創建複製構造函數的文化,對於從C++進入Java的人來說通常是一個混亂點。 – ruakh