首页 青云排行榜 知识中心 控制台

下面哪一项是正确的?(     )

class Dog {}
class Harrier extends Dog {}
class DogTest {
    public static void main(String[] args) {
        Dog dl = new Dog();
        Harrier hl = new Harrier();
        Dog d2 = hl;
        Harrier h2 = (Harrier) d2;
        Harrier h3 = d2;
    }
}

2个Dog对象被创建

2个Harrier对象被创建

3个Harrier对象被创建

编译失败

创建一个父类的实例,想要强制把父类对象转换成子类的,不行!
通俗的想,父亲永远不可能转换成儿子。因为有空白,假如转换了,那么上幼儿园、哺乳,这些儿子的特有属性父亲是没有的,强转就出现了ClassCastException

父类对象引用着一个子类实例。
Son类特有的属性暂时不能通过 f 来操作,因为Father类没有Son类(子类)的特有属性。
接着创建子类对象 s,它引用的是父类对象 f 强制转换来的对象(其实就是个装爹的Son,把他强制转回了Son),这时就可以通过 s 来操作子类的特有属性了。
通俗的说就是儿子装爹,终究是儿子,本质没变,还是可以把他强制转回儿子的。

Harrier h3 = d2; 这句话没有做强制类型转换,d2是名义上的父类,父类与子类不兼容,但d2对象本身还是子类,只要强制转换还是能成功的
关于我们
公司简介
联系我们
联系我们
售前咨询: leizhongnan@eval100.com
售后服务: 0755-26415932
商务合作: support@eval100.com
友情链接
金蝶软件
快递100
关注我们
Copyright © 2023-2023 深圳慧题科技有限公司 粤ICP备2023109746号-1 粤公网安备44030002001082