【Java学习】多态
目录
一、方法相同
二、方法重写
1.概念
2.条件
三、向上转型
1.概念
2.方式
四、方法绑定
五、多态
一、方法相同
方法相同要求方法名相同、参数列表相同、返回值类型相同(与两方法修饰的访问限定符相不相同、静态非静态状态相不相同无关),而且在子类与父类相同的方法中,子类那边方法的访问权限必须大于等于父类那边方法的访问权限
二、方法重写
1.概念
重写是由子类类变量引用赋给父类类变量引用后父类类变量引用里对原子类类变量里重写方法的选择去调用
2.条件
在父类与子类中相同的方法符合存在的情况下,如果子类的方法是非静态的,再加上父类的方法符合以下条件则能实现子类对父类方法的重写:
- 父类的那个要被重写的方法必须也是非静态的
- 并且在父类的非静态方法中,构造方法不能被重写:
(父类的构造方法的方法名必须与父类类名相同,子类的构造方法的方法名必须与子类类名相同,在子类那边的构造方法要重写必须方法名相同要与父类类名相同,在子类里不能实现它的这个构造方法,所以父类的构造方法不能重写)
- 父类那个要被重写的方法必须是要被直接对应的,不能被private修饰被包装
- 父类那个要被重写的方法不能被定义为确定最终执行方法,不能被final修饰
- 父类那个要被重写方法的返回类型要与子类重写方法的返回类型相同也可以呈继承关系的不同
三、向上转型
1.概念
子类类变量引用转类型为父类类变量引用就是向上转型:
子类的似复刻变量的引用用父类的类变量来接时,父类类变量引用接收后所指向的似复刻变量变为了用父类类变量创的似复刻变量,如果子类那边有对应实现的重写方法,路径信息上还有多加子类类变量的重写方法路径信息,在调用父类类变量的那个被重写的方法时会转为访问调用对应的子类重写的方法,除此之外子类类变量创的其它剩余下的似复刻变量部分引用的权限没有消失而是被隐藏,可通过对此父类类变量引用类型强转回子类类变量引用类型获取回子类类变量那边的被隐藏的权限,获取回子类类变量原本的全部访问权限(隐藏式父类类变量引用转回其子类类变量引用即向下转型)
2.方式
子类类变量引用是可类型安全地转为父类类变量引用的,此转类型不会丢失数据,是安全允许的可直接接转来转类型的,有赋值接转、形参接转、返回值类型接转
(向上转型是收敛式隐藏的减法,减得多减得少都不会出什么事,而向下转型是加法,如果加的加上原来不属于它的就出错了,所以向下转型是不安全的,类型转换需要强转)
- 似复刻变量A instanceof 似复刻变量B ,判断似复刻变量A是否是由似复刻变量B向上转型而来的
四、方法绑定
绑定即对方法多个选择的确定
- 调用重载的方法时,方法名相同的方法有多个,在编译时根据传参情况确定下要调用的方法,即静态绑定
- 调用重写的方法时,要调用的方法子类与父类都有且相同,在执行时根据重写的对象确定要执行的那个方法,即动态绑定
一个方法先经静态绑定后经动态绑定,最终确定要执行的方法
方法重载在同一个类中实现,方法重写在不同类即父类与子类中实现
五、多态
一个方法不同对象截然不同调用效果,这个父类方法是多态的,能够实现根据对象自动选择调用对应方法,即一个父类方法不同子类对象自动对应上各自子类方法,解决方法调用时选择哪个方法调用的选择问题,全部直接对它调用,不用自己判断选择调用了