为了账号安全,请及时绑定邮箱和手机立即绑定

将子类对象指定为超类对象时会发生什么情况

将子类对象指定为超类对象时会发生什么情况

HUX布斯 2022-09-14 16:02:44
所以我有一个关于超类A和子类B的问题,其中A有2个公共变量,B有1个以上的公共变量。我看到了这段代码:A a = new A(); B b = new B(); a = b;最后一行有什么作用?我真的不明白当你在继承关系中的2个类之间使用“=”时会发生什么。
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这是一个简单的任务。 是赋值运算符。=

让我们明确以下几点。

  1. 在 Java 中,当创建对象并且可以通过参考。引用对象。

  2. 一次一个引用只能引用一个对象

  3. 类型 X 的引用可以引用类型 X 的对象或任何子类型(在 X 是类的情况下进行扩展,如果 X 是接口,则实现)。

现在假设有两个类,使得 .SuperSubSub extends Super

 SuperClass reference = new SubClass();

这是允许的,因为子类继承自超类。上面我们有一个在堆中创建的子类类型的对象,它可以通过访问。名为reference

请注意,类型的引用不能引用 的对象。让我们简要地看看为什么会这样?如果允许对类型的引用引用类型的对象,那么它将被允许调用由定义的其他方法(函数),这将继承所有方法,并且还定义了几个附加方法)。现在,这会使应用程序崩溃,因为 的对象 仅在 中定义了方法,但没有 由 定义的任何其他方法。因此,编译器在编译时会阻止它。这是一个编译时错误,使类型的引用引用类型的对象SubClassSuperClassSubClassSuperClassSubClassSubClassSuperClassSuperClassSuperClassSubClassSubClassSuperClass

现在让我们看一下问题中提到的代码

 SuperClass a = new SuperClass();
  SubClass b = new SubClass();
 a = b;

第 1 行:我们有一个超类的对象,由一个名为a

第2行:我们有一个子类的对象,由一个名为子类的变量引用b

第 3 行:我们有一个赋值,其中 被分配来引用 与 所指的对象相同的对象。因此,现在我们有两个引用,都引用了在第 2 行创建的类型的对象。在第 1 行创建的 typer 对象(使用问题中提到的当前可用代码)没有任何引用,因此它符合垃圾回收的条件。abSubClassSuperClass


查看完整回答
反对 回复 2022-09-14
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

没有任何“反应”。变量“b”引用的对象是单个对象。它同时是 B 的实例和 A 的实例。

当你执行赋值时,先前由变量'a'引用的对象变得不可访问。对这一旧对象的考虑不参与这一讨论。a = b

赋值后,“a”和“b”引用到同一对象。对象未更改。它仍然是 B 的实例和 A 的实例。

也许您理解的障碍是对象和引用这些对象的变量之间的区别?


查看完整回答
反对 回复 2022-09-14
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信