多态详解 ——Java学习笔记
多态详解 ——Java学习笔记
前面的面向对象学习简单的写了一下多态,经过新的学习现在又详细的了解了多态,包括前面没学过的方法重写、向上转型、向下转型、动态绑定机制,在这里记录一下知识点
多态
一个方法在不同类中的不同实现
实现多态的前提条件:
-
继承 方法重写 父类引用指向子类对象(向上转型)
方法重写:
-
当父类中的方法无法满足子类的需求时,子类可以对该方法进行重写 必须和父类的方法名、返回值、参数列表完全相同,并且访问修饰符的范围不能变小
多态:
-
把父类对象指向子类对象的引用,就是把子类对象当作父类对象来使用, 他可以调用父类中所有的成员属性和方法(但是已经不能在调用子类自己的属性和方法) 但是如果子类中有重写了父类的方法,那么执行这个方法时一定执行子类的重写方法
多态的例子:
//测试类 public class Test { public static void main(String[] args) { Animal animal = new Animal(); animal.talk(); //以父类的名义实例化 Animal dog = new Dog(); //以子类自己的方法实现 dog.talk(); Animal cat = new Cat(); cat.talk(); } } //父类 class Animal { public void talk(){ System.out.println("叫声"); } } //子类 class Cat extends Animal{ public void talk(){ System.out.println("喵喵"); } } //子类 class Dog extends Animal{ public void talk(){ System.out.println("汪汪"); } }
引用数据类型转换
前面学习了基本数据类型的转换,自动转换和强制转换,引用数据类型转换也一样。分为向上转型和向下转型。
-
转型也是基于继承的基础上的。
向上转型
-
多态本身就是子类类型向父类类型向上转型的过程 将子类对象转换为父类对象就是向上转型(这个过程是自动的,可以认为自动转型) 父类类型 对象名 = new 子类类型(); 可以把向上转型后的对象看成父类对象 向上转型的对象可以调用父类中的所有普通方法和成员属性,但是只能调用子类中重写的方法
向下转型
-
将父类对象转换为子类对象就是向下转型(这个过程是强制的,需要强制转换) 注意: 不能直接把一个父类对象强制转换为一个子类对象 必须是一个向上转型后的对象,(就是向上转型后的还原) 格式: 子类类型 对象名 = (子类类型) 向上转型后的父类对象;
为什么要转型
当使用多态的方式调用方法时,首先检查父类中是否有该方法,如果没有,编译错误,(不能调用子类独有的方法),所以使用多态(向上转型后)又要调用子类特有的方法时,就要做向下转型
instanceof关键字
判断某个对象是否属于类或接口
在进行向下转型时,会遇到一些异常情况,俩个对象的类型不匹配等等问题,编译没问题但是运行时会有异常,所以使用向下转型时,最好使用上instanceof关键字,避免类型转换异常
//先判断,后转型 if (animal1 instanceof Dog){ Dog dog1 = (Dog) animal1; }
动态绑定机制
也叫做后期绑定、延迟绑定
绑定就是一个方法的调用要与方法所在的类关联起来。动态绑定就是在运行时根据具体对象的类型进行绑定
-
当有多态发生时,一定会发生动态绑定 动态绑定机制就是程序运行期间,会判断对象的真正的创建者是谁,就调用谁里面的方法
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
java程序员具备专业技能,2022最新