多态
一、
多态:父类的引用指向了子类的对象
父类                   子类
Person p = new Man();   编译期间看到是 p 是Person 类型的,所以只能调用Person类中的结构
- 我们在编译期,只能调用父类声明过的方法,但执行的是子类中重写的方法 ---虚拟方法调用
- 总结 :编译看左边,运行看右边
- 多态性的使用前提:1.类的继承 2.子类重写父类的方法
- 使用举例:在方法中,形参是父类类型,传进去的实参是子类类型
- 多态性不适用于属性,编译和运行都看左边
- 多态性是运行时行为,只有在运行时候才知道确定是类型是什么,在编译时只需要声明为父类的就行了
二、
那么,我们如果想要调用Man中特有的结构,该怎么办呢?
我们需要向下转型!! Man m = (Man) p;
这时编译期间看到的 m 是 Man 类型的 , 就可以调用Man中特有的结构了 。
那么我们来想想,既然 p 可以转成 Man类型的 , 是否也可以转成其他子类类型呢? 比如 Woman w = (Woman)p;
答案是:在编译期间不会报错,但是一运行就报错了。
那么我们该如何来避免这种错误的情况发生呢?
我们需要使用 instanceof 关键字来进行判断!
三、
instanceof关键字的使用
if(p instanceof Man){
Man m = (Man)p
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号