【发布时间】:2017-10-08 04:34:46
【问题描述】:
我正在维护一些如下所示的 Java 8 代码:
Class Entity {
protected Model theModel;
public Entity() {
init();
}
protected void init() {
this.theModel = new Model();
}
}
Class Model {
}
Class SubModel extends Model {
}
main {
Entity newEntity = new Entity() {
@Override
protected void init() {
this.theModel = new SubModel();
}
};
}
代码目前可以正确编译和运行,但我现在需要更新它。
我的问题是:
- 在
newEntity的构造过程中,init()方法的覆盖是如何工作的? - 对象构造函数语句中包含的此方法覆盖的正确术语是什么?
到目前为止,我的研究表明 Java 不能动态覆盖方法 - 不能在此基础上进行覆盖,因为方法覆盖是针对每个类而不是针对每个对象的。但是这段代码sn-p似乎表明Java在实践中可以做到?
更新:请注意,在 main 中创建 newEntity 会创建一个匿名子类,并且仅针对该匿名子类覆盖 init() 方法。这在下面的两个优秀答案中得到了更好的解释。
【问题讨论】:
-
请阅读this question 和答案。这是关于转义
this参考。
标签: java inheritance constructor java-8 polymorphism