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()方法。
阅读全文
1 0
- java
- JAVA
- JAVA
- JAVA
- java
- Java
- Java
- JAVA:
- java
- java
- java
- java
- Java
- java
- java
- java
- JAVA?
- java
- 土地经济学笔记第二部分
- 关于NFC P2P模式
- 自定义类型部分知识理解
- 解决phpmailer后的总结
- 'module' object has no attribute 'JSONField' Django REST framework
- Java
- 初学SpringMVC 小总结(有些术语说的不准确以后会加强,有些只是我个人理解,发现有问题可以告诉我)
- C#静态类
- laravel5.5 路由分割成不同文件
- iOS开发之UI篇(8)—— UITextField
- Ubuntu环境下配置PHP7+Apache+MySQL图文教程
- error: no matching function for call to 'std::exception:exception(const char[16])'
- 使用swiper里的animate动画时出现的错误
- linux awk命令详解