多态
多态 :多种状态,对象不同 相同的方法可能会产生不同的行为
多态的好处
提高了代码的扩展性,前期定义的代码可以使用后期的内容
比如下面添加其他具体机器类,都可以实现run()方法,父类引用型变量绑定通过不同的对象调用同名的不同方法
多态的缺点
前期定义的内容不能使用后期子类的特有方法
每个具体的特有方法,那么Vehicle类型变量就无法访问,必须向下转换为子类对象
对象类型的隐式转换和显示转换
向上转换:是为了实现功能的扩展性
向下转换:是为了使用子类的特有功能
多态的要点
1.多态是方法的多态,不是属性的多态(属性与多态无关)
2.多态存在的3个必要条件:继承 ,方法重写,父类引用指向子类对象
3.父类引用指向子类对象后,用该父类调用子类重写方法,此时多态就出现了
例子
public class TestAgain {
public static void main(String[] args) {
Vehicle pl =new Plane();
pl.run();//自动类型提升,Plane对象提升为了Vehicle(向上转型),但是特有功能无法访问
// pl.stop(); //无法访问Plane的特有方法
Vehicle a = new Car();
act(a);//把子类对象 传递给父类引用
}
public static void act(Vehicle v) {
v.run();
if(v instanceof Plane)
((Plane) v).stop();
if(v instanceof Car)
((Car) v).stop();
}
}
class Vehicle{
public void run(){
System.out.println("动起来了");
}
}
class Plane extends Vehicle{
public void run() {
System.out.println("起飞了");
}
public void stop() {
System.out.println("坠机了");
}
}
class Car extends Vehicle{
public void run() {
System.out.println("油门响了");
}
public void stop() {
System.out.println("车爆胎了");
}
}
结果:
起飞了
油门响了
车爆胎了