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

从内存认识对象转型

作者: 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属性是存在的,只不过不能访问。

总结

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

相关文章

  • 从内存认识对象转型

    这里有基类Animal和子类Dog,现在执行下列代码: 在这种情况下,a是无法直接访问color字段的,而d1可以...

  • Synchronized原理

    1、认识JAVA对象的组成结构 对象的内存结构:在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐...

  • python多进程和多线程、内存共享和进程池、多线程编程

    @[toc] 内存共享 通过Value,Array实现内存共享返回一个从共享内存上创建的ctypes对象从共享内存...

  • JavaSE之多态

    转型:向上转型(上溯造型)、向下转型(下溯造型) 向上转型:父类引用指向子类对象。 父类的引用 = 子类的对象(也...

  • Android 内存泄漏

    内存泄漏的原因 常见的内存泄漏与解决方法 检测内存泄漏 认识内存泄漏 根本原因就是当一个对象理应被回收的时候,因为...

  • 对象转型

    分享以下一段代码 程序运行的结果是“#######”,但是a.Bprint()这里会出错,是不是就可以理解为向上转...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • Java对象内存分析

    此处对象内存分析只针对Java基本对象,暂不对集合对象进行剖析。 内存 栈内存 堆内存

  • 2018-05-04 Java向上转型和向下转型

    Java中,对象类型转换分为向上转型和向下转型两种 1. 向上转型 子类对象到父类对象的类型转换,通常由系统自动完...

  • 基于C++的通过内存映射实现进程间的数据交换

    VC++ 通过内存映射实现进程间的数据交换,创建内存映像对象,从内存映射对象读数据,将文件的视图映射到一个进程的地...

网友评论

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

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