我知道这已经过时了但是这个项目出现在我最近一直在做的项目上(只是一个初级开发人员做出了意想不到的事情 - 没有实际的理由!)我觉得有些答案错过了这一点.
这与正常的多态性无关; 我认为这个问题与代码如下所示:
class A {
B b; //odd reference here..
}
class B extends A {
}
Run Code Online (Sandbox Code Playgroud)
其中子类用于超类的定义.据一个我可以告诉有自己的编码是这样的没有合法理由,但理由的语言可以让你做到这一点是,它需要一些核心的Java类如Object.
例如,虽然它没有存储对它的引用,但是用于Object创建并返回String其默认toString方法中的对象的代码String是一个子类Object.
有趣的是,虽然它在技术上是允许的,但是让超类在其构造函数中创建子类实例是没有意义的.
例如
class A {
B b;
A(){
b = new B();
}
}
class B extends A {
}
Run Code Online (Sandbox Code Playgroud)
这会因为它创建一个无限循环而崩溃,因为B的构造函数正在调用A的构造函数,它正在调用B的构造函数等.
| 归档时间: |
|
| 查看次数: |
26983 次 |
| 最近记录: |