目录

一文精通JAVA-第三篇多态

【一文精通JAVA | 第三篇】多态


一、多态实现的条件:

1.必须在继承体系下

2.子类必须要对父类中方法进行重写

3.通过父类的引用调用重写的方法。

多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。

如果父类中已经有一个方法了,子类中又有方法名相同的方法,此时父类中的方法会被覆盖,这种情况叫重写/覆盖。

重写叫做 override

哪些方法不能被重写?

1.被private修饰的方法

2.被static修饰的方法

3.子类的访问修饰限定符一定要大于等于父类的访问限定符修饰。

https://i-blog.csdnimg.cn/direct/531be1d1466940da9666e85923775106.png

4.被final修饰的方法

协变类型

https://i-blog.csdnimg.cn/direct/498cbb7519134d2a8de4259b09a6afe3.png

https://i-blog.csdnimg.cn/direct/44db1b2c7b204409b270235325f744bc.png

当类中,方法名和参数名都相同时,我们称之为重写,当只有方法名相同时,我们称之为重载

方法重写规则:

子类方法在重写父类的方法是,一般必须与父类方法原型一致:返回值类型 方法名 (参数列表)要完全一致 被重写的方法返回值类型可以不同,但是必须具有父子类型的

重载和重写的区别?

https://i-blog.csdnimg.cn/direct/b35800457f744aca9c955aa4e8380496.png

二、向上转型和向下转型

向上转型

其实就一句话,通过子类指向父类对象

实际是创建一个子类对象,将其当成父类对象来使用

语法格式: 父类类型 对象名 = new 子类类型()

https://i-blog.csdnimg.cn/direct/23b145a16ea0443b87a779cf6d613ead.png

通过animal的引用无法调用子类的方法,从小范围到大范围的转换。

原因:

类型为animal此时调用时,只能调用父类自己的。

https://i-blog.csdnimg.cn/direct/49469da30ac546c3a600a15120908fad.png

animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换。

向上转型的时机:

1.直接赋值

2.传参

3.返回值

向下转型

向下转型 指的是 把父类的引用转换为子类的引用 ,从而访问子类特有的方法和属性。

前提: 向下转型前,该父类引用必须 实际指向的是一个子类对象 ,否则会导致 ClassCastException报错

三、向上转型 vs 向下转型

https://i-blog.csdnimg.cn/direct/a8c2115afa3942e59e6702adb8243144.png