一、多态
1.多态的基本概念
通俗来说,就是多种形态。在Java中,如果要深入了解多态的概念,就要从多态的实现条件来展开
1.1 多态的实现条件
在Java中要实现多态,必须满足以下几个条件(缺一不可)
多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的办法
2.重写
重写(也称为覆盖)简单来说, 子类对父类的方法重新编写,达到子类可以自己特定于自己的行为 。
如:任何动物都会吃饭,但有的动物吃的不一样,像狗吃的是狗粮,如图:狗对于动物的重写

2.1 方法重写的规则
(1)重写时,必须与父类原型一致:方法名、参数列表
(2)重写时,返回值类型可以不同,但返回值类型必须是具有父子关系的,如果不具有,返回值类型必须相同

(3)重写时,子类与父类对访问限定符的要求
子类的访问限定符的权限要大于等于父类 的权限
如图:描述访问限定符的权限
| 1 | 同一包中同一类 | ✅️ | ✅️ | ✅️ | ✅️ |
| 2 | 同一包中的不同类 | ✅️ | ✅️ | ✅️ | |
| 3 | 不同包中的子类 | ✅️ | ✅️ | ||
| 4 | 不同包中的非子类 | ✅️ |

(4)父类的方法如果被static、final、private 修饰,则子类不能构成重写
父类被static修饰的方法,则不会产生特定的对象,是所有对象共享的,则不会有自己特定的行为;父类被final修饰的方法直接被锁定了,无法被子类重写;父类被private修饰的方法,只能在该类中使用,也无法完成重写
(5)父类如果是构造方法 ,子类同样不能构成重写
如果父类是构造方法,那么一定先会执行父类的构造方法,然后在执行子类自己定义的方法,因此就无法产生子类特定的行为
2.2 利用编译器实现重写

3.向上转型(实现父类的引用)
向上转型是父类引用,引用了子类对象 ,转的是两个类型,相当于是从小类型转到大类型,不会发生强转
3.1 向上转型的方式
(1)直接赋值

(2)方法参数的传递

(3)方法的返回值

3.2 转型的父类对成员的访问
(1)依然只能访问父类自己的成员

(2)对于子类重写父类的方法,可以访问

(3)那么父类引用是如何访问子类重写的方法呢?
答案是:通过动态绑定的方式
4.动态绑定
动态绑定(也称为运行时绑定):父类引用,引用了子类的对象,然后通过父类引用,调用了这个重写的方法

5.向下转型
将⼀个⼦类对象经过向上转型之后当成⽗类⽅法使⽤,再⽆法调⽤⼦类的⽅法,但有时候可能需要调⽤⼦类特有的⽅法,此时:将⽗类引⽤再还原为⼦类对象即可 ,即向下转换

5.1 intanceof关键字
由于向下转型不安全,java为了提高向下转型的安全性,引入instanceof ,如果表达式为true,则可以安全转换

6.多态的定义
根据上述描述多态实现的条件,我们可以理解为多态是同一个引用、同一个方法、通过引用的对象不一样,调用同一个方法所表现的行为不一样的一种思想



