美文网首页
从内存认识对象转型

从内存认识对象转型

作者: Rimson | 来源:发表于2018-10-30 19:06 被阅读0次
    class Animal {
            public String name;
            public Animal(String name) {
                this.name = name;
            }
        }
    
        class Dog extends Animal {
            public String furColor;
    
            public Dog(String name, String color) {
                super(name);
                this.furColor = color;
            }
        }
    

    这里有基类Animal和子类Dog,现在执行下列代码:

    Animal a = new Dog("bigyellow", "yellow");
    Dog d1 = (Dog) animal;
    

    在这种情况下,a是无法直接访问color字段的,而d1可以。
    那么问题来了:
    a无法访问color字段,但是向下转型之后可以,那么a的color保存在哪里呢?
    直接上图:


    指向Dog实例对象的引用对象animal是一个Animal类型的引用类型,如果Animal类型指向了Dog对象,程序会把它当作一只普通的Animal而不是Dog(也就是黄色箭头所指)。因此,a只能看到子类对象中的父类对象,因此只能访问name属性。但是furColor属性是存在的,只不过不能访问。

    总结

    父类引用指向子类对象的时候,它看到的只是作为父类的那部分所拥有的属性和方法,至于作为子类的那部分它没有看到。

    相关文章

      网友评论

          本文标题:从内存认识对象转型

          本文链接:https://www.haomeiwen.com/subject/ipcntqtx.html