JavaOO 中的繼承問題
阿新 • • 發佈:2018-12-26
繼承是一種類和類的關係,比如小汽車類和汽車類,小汽車類繼承了汽車類,小汽車就叫汽車類的子類或者派生類,汽車就是小汽車的父類或者基類,繼承的好處就是子類可以繼承父類的屬性和方法,特別提醒private修飾符不能夠被繼承
語法: class 子類 extends 父類{}
eg:class coupe extends Car{
…………….
}
實際應用:
//父類
public class Car{
public int height;
public int weight;
private int MaxSpeed;//私有屬性
public String logo;
public void drive(){
System.out.println("父類的方法被呼叫");
}
}
//子類
public class Coupe extends Car{
}//子類已經被建立 可以在main函式中呼叫coupe的方法和屬性(從父類繼承而來)
public class Test{
public static void main(String[] args){
Coupe coupe = new Car();//子類的例項化
coupe.height = 1;//繼承父類的屬性 並且可寫
coupe.weight = 3;
coupe.MaxSpeed = 100 ;//會報錯因為是私有屬性
coupe.drive();//繼承父類的 方法 drive
}
}
----------
子類還可以擁有自己的方法和屬性(重寫)
//子類
public class Coupe extend Car{
public void drive(){
System.out.println("drive方法已經重寫");//優先呼叫子類的方法
}
}
那麼繼承的初始化順序是什麼樣的呢?
先初始化父類再初始化子類
先執行初始化物件中的屬性再執行構造方法中的初始化
eg:
public class Car{
public int height = 1;//先將height賦值
public int weight;
private int MaxSpeed;//私有屬性
public String logo;
public void drive(){
System.out.println("父類的方法被呼叫");
}
//構造方法
public Car(){
System.out.println("父類執行了");
height = 2;//更改height
}
}
//子類
public class Coupe extends Car{
// 構造方法
public Coupe(){
System.out.println("子類執行了");
}
}//子類已經被建立 可以在main函式中呼叫coupe的方法和屬性(從父類繼承而來)
public class Test{
public static void main(String[] args){
Car car = new Car();
System.out.println("height:"+height);// Console顯示為2;
Coupe coupe = new Car();//子類的例項化
coupe.height = 1;//繼承父類的屬性 並且可寫
coupe.weight = 3;
coupe.drive();//繼承父類的 方法 drive
}
}
//Consloe中 會顯示
父類執行了
子類執行了
父類的方法被呼叫
//但是先進行父類的構造方法的初始化 還是屬性的初始化呢?
//可以在構造方法中再新增一個數據 跟據最後輸出什麼來判斷先初始化構造方法還是 //先初始化屬性
----------
上述更改height在構造器中的值證明先初始化屬性在初始化構造方法
建立子類物件時1.先建立父類物件進行屬性初始化。2.初始化父類的構造方法 3.再初始化子類的屬性4.初始化子類的構造方法。