1.使用多态的理由
对需要管理的类进行抽象之后提供一个接口,让不同的类对象实现不同的功能,而可以在该类中提供调用方法,不用管类型不同(一视同仁),不用去管各类的实现细节,达到了应用与实现的分离。
实例:
假设现在有3个class:自行车(bicycle),小轿车(car),卡车(truck),分别提供了ride(), run(), lauch()不同的启动方式。三个方法都是启动车,如果没有多态,代码将会是这样
// 实现
Bicycle bicyle = new Bicycle();
Car car = new Car();
Truck truck = new Truck();
// 使用部分
bicyle.Ride();
car.Run();
truck.Launch();
运用传统的实现方法那就是一部分是类的实现;另一部分是类的使用,如果其中的Car类中的run方法被修改,那么应用部分同样需要修改,增加了代码维护的难度,这样的结果不是我们愿意看到的。
//实现部分
class Vehicle{
public void start(){
System.out.print("我是交通工具");
}
}
class Bicycle{
public void start(){
System.out.print("我是Bicycle");
}
}
class Car{
public void start(){
System.out.print("我是Car");
}
}
class Truck{
public void start(){
System.out.print("我是Truck");
}
}
使用
Vehicle tool = new Bicycle(); // 自行车启动
tool.start();
tool = new Car(); // 轿车启动
tool.start();
tool = new Truck(); // 自行车启动
tool.start();
运用多态后,将三类共有的东西抽象出来,放到一个总类(Vehicle)中去,提供一个可供子类实现的接口。
2.多态的实现方式
1. 重载:通过参数的变动实现
2. 重写:不同类对抽象类的不同实现方式
3. 对象多态(上转型实现):与重写和重载搭配实现,其中java的动态内存绑定机制,对于多态的实现非常重要。
3.java动态内存绑定机制
- 调用对象方法的时候,该方法会和该对象内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
本章内容参考:
【1】 程序员应如何理解多态
【2】韩顺平老师的java基础入门课