java基礎之---多態

正文

多態的存在有三個必要的條件:

  • 要有繼承(兩個類之間存在繼承關係,子類繼承父類)
  • 要有重寫(在子類裏面重寫從父類繼承下來的方法)
  • 父類引用指向子類對象
    這三個條件一旦滿足,當你調用父類裏面被重寫的方法的時候,實際當中new的是哪個子類對象,就調用這個子類對象的方法。下面以代碼進行說明

這裏創建了一個Animal類,作爲父類:

package com.mlin;

public class Animal {
    
    //私有成員變量
    private String name;
    
    //構造方法
    Animal(String name){
        this.name = name;
    }
    
    //這裏定義了一個方法
    public void call(){
        System.out.println("動物......");
    }

}

創建兩個子類,分別爲Cat類和Dog類,它們都繼承Animal類:

package com.mlin;

public class Cat extends Animal {
    
    //定義自己的私有成員變量
    private String catColor;
    

    //構造方法
    Cat(String name ,String catColor) {
        super(name);//在構造方法的實現裏面首先使用super調用父類Animal的構造方法Animal(String name),把子類對象裏面的父類對象先造出來
        this.catColor = catColor;
    }
    
    //這裏是重寫了call方法
    public void call(){
        System.out.println("我是cat哦....");
    }

}
package com.mlin;

public class Dog extends Animal {
    
    //定義自己的私有成員變量
    private String dogColor;
    

    //構造方法
    Dog(String name ,String dogColor) {
        super(name);//在構造方法的實現裏面首先使用super調用父類Animal的構造方法Animal(String name),把子類對象裏面的父類對象先造出來
        this.dogColor = dogColor;
    }
    
    //這裏是重寫了call方法
    public void call(){
        System.out.println("我是dog哦....");
    }

}

創建一個person類,用於飼養寵物:

package com.mlin;

public class Person {
    
    //定義兩個私有成員變量
    private String name;
    private Animal pet;
    
    /**
     * 在person類裏面定義構造方法,第二個參數是Animal類型給程序帶來了靈活性
     * 因爲這個Animal類型的參數是父類對象的引用類型,因此當我們傳參數的時候,
     * 可以把這個父類的子類對象傳過去,即傳Dog、Cat都可以。
     * @param name
     * @param pet
     */
    Person(String name,Animal pet){
        this.name = name;
        this.pet = pet;
    }
    
    public void myCall(){

        pet.call(); //傳了什麼對象進來,就讓這個對象去調用它自己的call方法
    }
    
    public static void main(String arg[]){
        
        //這裏分別new了一個cat對象和dog對象,這兩個都包含一個父類Animal對象
        Cat cat = new Cat("catname", "black");
        Dog dog = new Dog("dogname","yellow");
        
        //這裏new了兩個person對象,分別爲p1,養了一個cat,另一個是p2,養了一隻dog
        Person p1 = new Person("andy", cat);
        Person p2 = new Person("andy", dog);
        
        //兩個person對象調用了myCall方法,使他們自己的寵物調用自己的call方法
        p1.myCall();
        p2.myCall();
    }

}

運行結果如下:


以上就實現了動態綁定,也就是多態。

原創作者:凌小樣
作品鏈接:https://www.jianshu.com/p/c8160a2bd019
【原創不易,轉載請註明出處,感謝理解】
一位愛生活,愛創作,愛分享,愛自己的90後女程序員一枚,記錄工作中的點點滴滴,一起學習,共同進步,期待能和優秀的您交上朋友

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