1. 程式人生 > >多型(Polymorphism)的簡單實現

多型(Polymorphism)的簡單實現

實現一個簡單的執行時多型
繼承(extends) + 方法重寫(override)

直接上程式碼
一個超類Car, 三個子類BmwCar, AudiCar, PorscheCar。
其中show()方法為那個重寫的方法,但是隻有BmwCar和AudiCar重寫了該方法:

超類Car:

public class Car {
    private String brand;
    private String color;
    private int doorNum;

    public Car(String brand, String color, int doorNum) {
        this
.brand = brand; this.color = color; this.doorNum = doorNum; } public void show(){ System.out.println("沒有該車的資訊!"); } public String getBrand() { return brand; } public String getColor() { return color; } public int getDoorNum() { return
doorNum; } }

子類1 BmwCar:

public class BmwCar extends Car {
    public BmwCar() {
        super("BMW","Black",2);
    }

    @Override
    public void show(){
        System.out.println(super.getBrand() + " "
                         + super.getColor() +
                         + " DoorNum:" +
                         + super
.getDoorNum()); } }

子類2 AudiCar:

public class AudiCar extends Car{
    public AudiCar() {
        super("Audi","Red",4);
    }

    @Override
    public void show(){
        System.out.println(super.getBrand() + " "
                         + super.getColor() +
                         + " DoorNum:" +
                         + super.getDoorNum());
    }
}

子類3 PorscheCar:

public class PorscheCar extends Car{
    public PorscheCar() {
        super("Porsche","Blue",5);
    }
}

主函式:
為了更明顯的看出多型的現象,在主函式中定義了一個額外的方法randomCar()用來隨機返回任意子類。

public class Main {

    public static void main(String[] args) {
        for (int i = 1; i <10; i++){
            Car car = randomCar();
            System.out.print(car.getBrand() + "-> ");
            car.show();
        }
    }

    public static Car randomCar(){
        int randomNum =(int)(Math.random()*3) + 1;
        System.out.print("Random No." + randomNum + "  ");
        switch (randomNum){
            case 1:
                return new BmwCar();
            case 2:
                return new AudiCar();
            case 3:
                return new PorscheCar();
        }
        return null;
    }
}

程式輸出:

這裡寫圖片描述

主函式中最核心的程式碼為
Car car = randomCar();
car.show();
同樣的程式碼,得到的結果卻不同。
因為show()方法在子類BmwCar和子類AudiCar中都進行了重寫,於是呼叫了它們重寫的show()方法, 而子類PorscheCar中沒有重寫show()方法,所以呼叫了超類的show()方法。