美文网首页Android开发
父类引用可以指向子类对象,子类引用不能指向父类对象

父类引用可以指向子类对象,子类引用不能指向父类对象

作者: 青叶小小 | 来源:发表于2021-01-09 01:07 被阅读0次

    有些人可能会把继承和引用弄混,所以,这里就阐明一下,顺便聊聊今天的主题。

    类与类之间通过『extends』关键字,联系起来就是继承!
    继承也能传递,如下代码:

    class Parent {
        public void whoIs() {
            System.out.println("I'm Parent class");
        }
    }
    
    class Child extends Parent {
        @Override
        public void whoIs() {
            System.out.println("I'm Child class");
        }
    }
    
    class Son extends Child {
        @Override
        public void whoIs() {
            System.out.println("I'm Son class");
        }
    }
    

    那么,类 Son 间接继承了 Parent 类。

    今天的正题:\color{red}{对象引用}

    1. 假设 Parent 内存开销为 2M
    2. 假设 Child 内存开销为 1M
    // 首先初始化两个对象实例
    Parent parent = new Parent(); // 系统分配 2M 内存
    Child child = new Child();    // 系统分配 3M 内存 (2M + 1M)
    

    因为 Child 继承 Parent,所以,Child 实例化前会先实例化父类,即 Child 构造函数执行前,先执行 Parent 的构造函数,所以,子类才能调用父类的 public/protected 方法。

    Parent p = (Parent)child; // OK!没问题

    因为 child 的实例是 Child内存空间 + Parent内存空间,所以 此时的 p 实际上指向的是 child 中 Parent的内存空间,即 p 指向的是 3M 中的 2M 内存空间。

    Child c = (Child)parent; // ClassCastException

    同上的理论,parent 的实例只有 Parent的内存空间,此时类型转换时,parent 的内存空间中,没有 Child 的内存空间,因此,也就无法转换。

    相关文章

      网友评论

        本文标题:父类引用可以指向子类对象,子类引用不能指向父类对象

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