1. 程式人生 > >JavaOO 中的繼承問題

JavaOO 中的繼承問題

繼承是一種類和類的關係,比如小汽車類和汽車類,小汽車類繼承了汽車類,小汽車就叫汽車類的子類或者派生類,汽車就是小汽車的父類或者基類,繼承的好處就是子類可以繼承父類的屬性和方法,特別提醒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.初始化子類的構造方法。