Java的繼承
什么是繼承(extends)?
繼承是:新定義的類是從已有的類中獲取屬性和方法的現象。 這個已有的類叫做父類, 從這個父類獲取屬性和方法的類叫做子類。
/什么是繼承/
public class ExtendsDemo1 {
public static void main(String[] args) {
Truck t = new Truck();
t.size = 100; //不建議這么寫。初始化成員變量最好使用構造方法,或者提供set(), get()接口.
//貨車類的一個實例t從汽車類從繼承了size, color屬性。
//而貨車比汽車多一個貨箱
}
}
class Car { //汽車
int size; //車體大小
String color; //顏色
}
class Truck extends Car { //貨車
String packingBox; //貨箱
}
繼承的好處
- 提高了代碼的重用性
- 讓類和類之間產生了關系, 為多態創造了條件。
繼承(extends)的格式
class SubClass extends SuperClass {
//執行語句;
}
ps:(extends是拓展的意思,subClass在superClass的基礎上進行拓展)
子類實例化
子類實例化中的關鍵字super
super 在構造函數中出現的時候一般是當前這個類繼承了其他的類,super 的出現就是為了調用父類的構造函數
class Tiger {
int age; // 年齡
int hight; // 身體高度
public Tiger() {
print();
}
public void print() {
System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
}
}
public class JavanTiger extends Tiger {
public JavanTiger() {
super(); // 調用父類無參數的構造函數
}
public static void main(String[] args) {
new JavanTiger();
}
}
其實在類JavanTiger 中的構造函數中的 super()可以不寫,JAVA會默認調用父類的無參數的構造函數,但如果父類沒有定義無參數的構造函數,沒有語法錯誤,程序會自動退出,沒有任何打印語句,這時候你需要手動調用其他父類的構造函數
class Tiger {
int age; // 年齡
int hight; // 身體高度
public Tiger(int age) {
this.age = age;
print();
}
public void print() {
System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
}
}
public class JavanTiger extends Tiger {
public JavanTiger() {
super(1); // 調用父類有參數的構造函數
}
public static void main(String[] args) {
new JavanTiger();
}
}
這段代碼中的 super(1)必須要寫進去,否則編譯器會報錯。“this()是調用自己其他的構造函數,super()是調用自己繼承的父類的構造函數“,如果只想調用默認無參數的父類構造函數,不用在子類的構造函數當中寫出來,但是實際編程的時候,總是會忽略這一點。
那門這兩個關鍵字能不能同時出現在子類的一個構造函數當中納?答案肯定是不能。先說下自己的理解:
1)在新建一個基類的時候,不論遞歸調用幾次自身的構造函數,最終你都會去調用父類的構造函數,(不是顯式調用的話,系統會調用默認無參數的父類構造函數);
2)JAVA 中規定使用 this 和 super 時必須放在構造函數第一行,只有一個第一行;