Android开发

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

2021-01-09  本文已影响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 的内存空间,因此,也就无法转换。

上一篇下一篇

猜你喜欢

热点阅读