java——繼承遇到構造方法

Princess$發表於2020-11-05

背景

程式碼中建立的類, 主要是為了抽象現實中的一些事物.有的時候客觀事物之間就存在一些關聯關係, 那麼在表示成類和物件的時候也會存在一定的關聯.

例如, 設計一個類表示動物


class Animal{
    public String name;

    public void eat(){
        System.out.println("Animal::eat()");
    }

    public void sleep(){
        System.out.println("Animal::sleep()");
    }
}

class Cat{
    public String name;

    public void eat(){
        System.out.println("Cat::eat()");
    }
}

class Bird{
    public String name;

    public void eat(){
        System.out.println("Bird::eat()");
    }

    public void fly(){
        System.out.println("Bird::fly()");
    }
}

以上程式碼可以看出,程式碼思路雖然沒有問題,但是有很多冗餘的地方,為了簡化程式碼,我們引出繼承

語法規則

class 子類 extends 父類 {
}

使用繼承之後,程式碼變成


class Animal{
    public String name;
    public void eat(){
        System.out.println(this.name + "Animal::eat()");
    }
    public void sleep(){
        System.out.println("Animal::sleep()");
    }
}


class Cat extends Animal{
//把以下程式碼遮蔽,依然可以執行
//    public String name;
//    @Override
//    public void eat(){
//        System.out.println(this.name+"Cat::eat()");
//    }
}

public class TestDemo {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.name = "mimi";
        cat.eat();
    }
}

以上程式碼的輸出結果為:

mimiAnimal::eat()

繼承遇到構造方法

由於在給子類構造的時候,要先幫助父類進行構造,利用以下關鍵字:

super()

//必須放到第一行

> super代表父類物件的引用
super():呼叫父類的構造方法
super.data():訪問父類的屬性
super.func():訪問父類的成員方法

程式碼修改為:


class Animal{
    public String name;

    //新增構造方法
    public Animal(String name) {
        this.name = name;
    }

    public void eat(){
        System.out.println(this.name + "Animal::eat()");
    }
}

class Cat extends Animal{
    public Cat(String name){
        super(name);//顯式呼叫//寫道第一行
    }
//    public String name;
//    @Override
//    public void eat(){
//        System.out.println(this.name+"Cat::eat()");
//    }
}

class Bird extends Animal{
    public Bird(String name){
        super(name);
    }
//    public String name;
//
//    public void eat(){
//        System.out.println("Bird::eat()");
//    }
//
    public void fly(){
        System.out.println("Bird::fly()");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Cat cat = new Cat("haha");
        cat.eat();
        Bird bird = new Bird("bage");
        bird.eat();//訪問Animal的
        bird.fly();//訪問自己的
    }
}

相關文章