Aniaml animal = dog;这句怎么理解啊?

来源:10-2 多态中的引用类型转换

慕清岭

2018-09-29 15:15

Aniaml animal = dog;这句怎么理解啊?

Aniaml animal =new Animal();意思是创建Animal对象,这边写=dog,是创建了一个Dog类对象animal?还是把之前

Dog dog=new Dog();这里的dog转成Animal类型了。


写回答 关注

3回答

  • pardon110
    2018-09-30 20:08:29

    父类持有子类的引用。简单点讲animal对象与dog对象持有相同方法say()时,假定Animal的say方法是打印字符串“a",后者是“doger"。当你用 Aniaml animal = dog  之后( 向上转型)。调用animal对象的say方法,输出的内容是doger 字符串,而非是a。

    qq_慕移动...

    如果是Dog dog1=(Dog)animal;那调用方法后为什么是doger,而不是a 呢?

    2019-01-16 13:53:17

    共 1 条回复 >

  • 洛辰m
    2018-09-30 17:40:25

    前一句不是Dog dog = new Dog();意思就是创建了一个dog对象,类型是Dog,用一个子类的引用dog指向子类对象,然后Animal animal = dog;这个就是用一个父类的引用animal指向这个子类对象dog,是Animal类型的(因为是类是对象的类型),就是由Dog类型转换为Animal类型,又因为Dog是Animal的子类,所以是向上转换。不知道你能理解我说的意思吗。。。我表达的可能不是很清楚,但大致就是这个意思,手打不易啊望采纳。不懂可以追问。

  • 慕斯0752781
    2018-09-29 17:49:14

    先看上面一句先创建了dog对象,记住是dog对象,已经有了一只狗对象,下面animal=dog这句你可以这么理解—狗是动物,向上转换就是这样,向下转换你可以这样说—dog=animal动物是狗,是不是觉得有问题!但这里创建对象是狗,向下有了一个对象,向下转换的时候可以这么理解—dog=(Dog)animal这个动物是狗,那就没问题了。后面说猫为什么不行,cat=(Cat)animal这个动物是猫。但是你创建的对象是狗,所以不对!

    晨旭圆

    这种比喻挺好,给你赞

    2018-10-01 10:25:56

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530559 学习 · 6091 问题

查看课程

相似问题