java 多态
多态
实际就是 父类引用变量类型,指向子类实际对象。
对象能执行那些方法,主要有左边的引用类型确定,与右边的实际对象关系不大——
注意事项:
-
多态是方法的多态,属性没有多态。
-
必须有联系,父类和字类,如果没有汇报错 ClassCastException
-
存在条件,继承关系
-
当为父类引用类型是,使用方法,会在父类查找,没有,则报错,如果子类有重写,则调用子类的
- 对于重写方法,以下类型是不可以重写的
- static : 方法直接属于类,能够公共调用
- final : 常量,位于常量池,公共访问
- private : 方法为私有变量,不可继承
- 对于重写方法,以下类型是不可以重写的
-
instanceof(类型转换): 引用类型,判断一个对象是什么类型,返回boolea类型,类与类关系判断
Person p=new Student(); bool=p instanceof Student; //判断左边,当不能直接强制类型转换时,会直接报错; 当允许时,判断右边,查看实际对象能否强制对象转换,能:true,不能:false //类的强制类型转换:父类转化为子类
-
编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
-
obj 操作数的类型必须是引用类型或空类型; 否则,会发生编译时错误。
-
实现原理https://www.cnblogs.com/ysocean/p/8486500.html#_label6
boolean result; if (obj == null) { result = false; } else { try { T temp = (T) obj; // checkcast result = true; } catch (ClassCastException e) { result = false; } }
-