请考虑以下代码段:
class Parent {
Parent() {
this = new Child();
}
}
class Child extends Parent { }
Run Code Online (Sandbox Code Playgroud)
上面会抛出语法错误: The left hand side of an assignment operator must be a variable
在java中,this关键字存储当前调用对象的内存地址.我希望用类'子类的实例覆盖当前对象.我理解上面的代码片段抛出一个错误,因为this它不是一个变量,可能是不可变的.
但是,我想知道为什么java不允许上述功能?它有什么缺点吗?
编辑:这个问题在我看来是参考自然语言处理(NLP)的背景.例如,在法语中,每个动词必须以'er','ir'或're'结尾.所有动词都有一些共同的特征.但是,每个动词必须是上述三种类型中的一种.所以在父类'Verb'的构造函数中,我想将创建的对象分类为'ErVerb','IrVerb'或'ReVerb'.
有两种情况:
如果您允许this实例化任何Object类型层次结构中的任何一个,那么实例化将无法保证其引用的内容.这打破了一些事情,最显着的是面向对象编程的整个概念.
如果限制this实例化为父类的任何子类,那么该子类构造函数将无限次地调用父构造函数,从而导致StackOverflowError.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |