Java

来源:互联网 发布:农村淘宝 广告 编辑:程序博客网 时间:2024/06/05 05:53

实现一个简单的运行时多态
继承(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()方法。

原创粉丝点击