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

关于java中覆盖和隐藏的统一问题

关于java中覆盖和隐藏的统一问题

森林海 2023-11-10 15:35:39
今天我们讨论了Overriding and ShadowingJava,在其中一张幻灯片(我已将其附在下面)中,我们被告知要密切注意最后 3 行,并确保我们了解发生了什么。我不确定我是否这样做,所以我需要一些帮助或解释。我的理解是,由于从对象b显式转换为对象,调用访问当前类的成员字段,在本例中将是 B 类的值为 6 的成员字段。但是当它必须调用被重写的方法时D 来自 B,编译器决定应该调用 D 的 f() 方法的实现,因为该对象最初是 D 对象(?)。我真的不确定我是否正确理解了这件事,所以我很感激您的反馈。BDb.iif()PS:既然 thesuperclass和 thesubclass都有一个具有相同名称和类型的变量(i)但没有冲突,不是吗shadowing?
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

情况1:

System.out.println(b.i);

这就是变量隐藏——“当子类中的实例变量与超类中的实例变量同名时,则从引用类型中选择实例变量。”

在您的情况下,d 被转换为 B,因此显示 B 中的实例变量。

案例2:

System.out.println(b.f());

这是方法重写- “(...)重写的方法完全取代了继承的方法,因此当我们尝试通过持有子对象来从父引用访问该方法时,子类中的方法将被调用。”

查看完整回答
反对 回复 2023-11-10
  • 1 回答
  • 0 关注
  • 57 浏览

添加回答

举报

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