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; //貨箱
}
繼承的好處
- 提高了代碼的重用性
- 讓類和類之間產生了關系杨伙, 為多態(tài)創(chuàng)造了條件。
繼承(extends)的格式
class SubClass extends SuperClass {
//執(zhí)行語句萌腿;
}
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 中規(guī)定使用 this 和 super 時必須放在構造函數第一行闸溃,只有一個第一行整吆;