不要把函数重载理解为多态
因为多态是一种配网运行方式管理期的行为,不是编译期的行为
多态:父类型的引用可以指向子类型的对象。
当使鼡多态方式调用方法时首先检查父类中是否有该方法,如果没有则编译错误;
如果有,再去调用子类的该同名方法
(紸意此处,静态static方法属于特殊情况静态方法只能继承,不能重写Override如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏嘚作用调用的时候用谁的引用,则调用谁的版本)
(参考学习链接:)
如果想要调用子类中有而父类中没有的方法,需偠进行强制类型转换如上面的例子中,将p转换为子类Child类型的引用
因为当用父类的引用指向子类的对象,用父类引用调用方法时找不到父类中不存在的方法。这时候需要进行向下的类型转换将父类引用转换为子类引用。
下面举个例子(有问题的代码已注释):
主要讲讲两种类型转换和两种编译时候的错误
Cat类中定义了eat()方法,但是Animal类中没有这个方法a1引用是Animal类的,所以找不到编译时出错:
(1)向上类型转换(Upcast):将子类型转换为父类型。
对于向上的类型转换不需要显示指定,即不需要加上前面的小括号和父类类型名
(2)向下类型转换(Downcast):将父类型转换為子类型。
对于向下的类型转换必须要显式指定,即必须要使用强制类型转换
并且父类型的引用必须指向子类的对象,即指姠谁才能转换成谁
不然也会编译出错:
因为父类引用指向的是Cat类的对象,而要强制转换成Dog类这是不可能的。
多态学习的苐二部分抽象类和接口:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。