一、什么是多态?
1.多个子类继承于某同一父类,该父类引用能指向任一子类对象,并能调用被子类重写的方法。
2.实现类与接口之间也存在多态,接口引用可以指向其任一实现类的对象,并能调用其被实现类重写的方法。
3.“子类与父类之间的多态”和“实现类与接口之间的多态”区别在于:
一个类只能继承于一个父类,但能实现多个接口。
4.注意:“能调用被子类(或实现类)重写的方法”指的是,一个父类(或接口)引用能调用当前所指向的子类(或实现类)对象的方法,不能调用非当前引用所指对象的方法。
二、多态中父类引用的特点
1.编译期间,由定义它的类型决定它的引用的类型,只能调用自身的方法和变量。
原因:编译期间,“=”号右边的对象还未被创建出来。如:Plant p = new Tree();
new Tree()这个对象还未被创建出来。
2.运行期间,引用的类型由所创建的对象的类型决定,能调用自身的方法变量及子类的方法变量。
原因:运行期间,“=”号右边的对象已创建。
三、多态的好处
具有良好的扩展性,符合程序设计的开闭原则。
四、多态的体现
1.父类引用作为方法参数实现多态;
2.父类引用作为方法返回值实现多态:如,简单工厂方法。
五、多态的局限性
父类引用只能调用自身的方法和被子类重写的方法,不能调用子类特有的方法。
变量名 instanceof 类型名。运行期间,instanceof判断左边引用是否是继承于右边类 。