多态定义:
相同类型的变量、调用同意方法时呈现出多种不同的行为特征,这就是多态。
Java引用变量有2个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量的类型决定,运行时类型由实际赋给该变量的类型决定。
如果编译时类型与运行时类型不一致,则就可能出现多态。
比如:
Child继承自Parent,则Parent p1=new Child();表示父类引用指向子类对象,编译时类型是Parent类型,运行时时Child类型。
p1.show();
//1、若父类中定义了show()方法,子类没有重写,则调用父类方法。
//2、若父类中定义了show()方法,子类重写该方法,则调用子类方法。
//3、若父类没有定义show()方法,子类定义了该方法,则调用出错!因为编译时无法调用show()方法。
为什么可以使用:Parent p1=new Child();
原因:因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋给父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。