造型问题

复习的时候看到了关于向上造型和向下造型的问题:
–向上造型:
(1)父类型的变量指向不同类型的子类型.
调用的功能有不同的实现
Animal a = new Dog();
a.noise();//叫
a = new Cat();
a.noise();//叫

  (2)不同的父类型变量指向同一个对象有不同的功能
        ZhengYangDoor  a  = new  ZhengYangDoor();
        a.theftproof();//防盗
        a.openDoor();//开门
        InterA   ia = a;
        ia.theftproof();   
                      
               
 --向下造型:
                    将父类型(接口)的变量赋值给子类型或者其他父类型(接口)的变量
                    只有向上造型无法满足需求时,才会向下造型
     Animal a = new Dog(); 
     Dog dog  = (Dog)a;
     dog.吃骨头();
    
     Cat cat = (Cat)a;//编译通过,语法正确,运行期间,造型错误
     cat.扑捉老鼠();
    
                    运行期间有可能会发生(类造型异常):java.lang.ClassCastException 
    

                   为了避免出现错误:我们需要使用关键字instanceof来判断
                                                    对象是不是要转换成的类型
       if(a instanceOf Cat){
         Cat cat = (Cat)a;
      }               

原文:https://blog.csdn.net/yk_3215123/article/details/81462373

但有一些问题需要说一下:
1.如果这样定义一个对象
Animal a = new Animal();
a是无法被向下造型的,编译阶段会出错。
2.如果B是A的子类型,定义两个对象:
A a = new A();
B b = new B();
对b向上造型,(A)b相当于A b = new B();
所以当(A)b调用a和b共有的方法的时候,还是会调用b的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值