美文网首页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 的内存空间,因此,也就无法转换。

相关文章

  • 里氏转换

    里氏转换的特点 父类引用指向子类对象 如果父类引用指向的是子类对象,那么可以将这个父类强转为子类对象 将父类强转为...

  • 向上转型与向下转型

    父类引用指向子类对象,则称为向上转型(upcasting)子类引用指向父类对象,称为向下转型(downcastin...

  • 16、子类和父类的赋值引用关系

    1、将子类的对象赋值给父类的引用✅。即:父类的引用可以指向子类的对象 2、将父类的对象直接赋值值给子类的引用 ❌,...

  • java的多态

    什么是“父类引用指向子类的对象”:父类 Person 子类 StudentPerson ...

  • 多态的再理解

    对象的多种形态 1.引用形态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 Animal d=new...

  • 二、Java面向对象-多态

    1、对象的多种形态 引用多态父类的引用可以指向本类的对象父类的引用可以指向子类的对象 方法多态创建本类对象时,调用...

  • Java的多态特性

    多态:对象的多种形态 1、引用多态 父类的引用可以指向本类的对象父类的引用可以指向子类的对象 2、方法多态 创建本...

  • java-多态中方法重载和方法重写

    1.当子类重载父类的方法,父类不能引用该方法。只能引用自己的方法。2.当子类重写父类的方法,父类引用指向子类对象时...

  • 多态

    对象的多种形态 1 引用多态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 2方法多态 创建本类对象...

  • 面向对象的三大特性之--多态

    1.对象的多种形态(1).引用多态父类的引用可以指向本类的对象父类的引用可以指向子类的对象(2).方法多态创建本类...

网友评论

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

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