多型(Polymorphism)的簡單實現
阿新 • • 發佈:2019-02-06
實現一個簡單的執行時多型
繼承(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()方法。