Java基礎強化——構造方法

構造方法

在繼承關係下構造方法執行時的順序:先執行父類構造方法,在執行子類構造方法

// 創建Animal兩類
class Animal {

    public Animal(){
        System.out.println("Animal執行構造方法");
    }

    public void eat(){
        System.out.println("Animal執行eat方法");
    }
}

// Cat繼承Animal類
class Cat extends Animal{

    //Cat類的構造方法
    public Cat(){
        System.out.println("Cat執行構造方法");
    }

    // 繼承父類方法進行了重新
    @Override
    public void eat(){
        System.out.println("Cat執行eat方法");
    }
}

// Tomcat繼承Cat類
class Tomcat extends Cat{

    public Tomcat(){
        System.out.println("Tomcat執行構造方法");
    }

    public void eat() {
        //System.out.println("Tomcat執行eat方法");
        super.eat();
    }
}

// 測試
public class ExtendsTest {

    public static void main(String[] args) {
        Cat cat = new Cat();
        Animal animal = new Cat();
        Animal animal2 = new Tomcat();
        Cat cat2 = new Tomcat();
        animal.eat();
        animal2.eat();
    }
}

運行結果:

/*
Cat執行構造方法
Animal執行構造方法
Cat執行構造方法
Tomcat執行構造方法
Animal執行構造方法
Cat執行構造方法
Tomcat執行構造方法
Cat執行eat方法
Cat執行eat方法
*/

解析:

Cat cat = new Cat();實例化對象調用Animal父類構造方法再調用Cat子類構造方法;

Animal animal = new Cat(); 對象animal引用的是Cat()實例化對象,同理先調用Animal父類構造方法再調用Cat子類構造方法;

Animal animal2 = new Tomcat(); 對象animal2引用的是Tomcat()實例化對象,同理先父類再子類,Tomcat的父類爲Cat,而Cat的父類是Animal,所以先執行Animal的構造方法,再執行Cat的構造方法,然後才執行Tomcat的構造方法;

Cat cat2 = new Tomcat();同理,構造方法執行順序和左邊創建的對象類型無關。

在繼承關係中,子類中和父類同名的方法會被子類方法覆蓋,如果想要調用父類的方法的話要使用super關鍵字。

**注意:**如果父類中存在有參數的構造方法,系統將不會自動生成默認的無參數構造方法,這時候需要手動創建,要不然在繼承過程中,子類實例化調用自身無參構造方法時,而父類卻沒有,這將會導致錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章