【发布时间】:2015-04-10 20:20:34
【问题描述】:
考虑以下代码sn-p:
class Parent {
Parent() {
this = new Child();
}
}
class Child extends Parent { }
上面会抛出语法错误:The left hand side of an assignment operator must be a variable
在java中,this关键字存放的是当前调用对象的内存地址。我希望用类的子类的实例覆盖当前对象。我知道上面的 sn-p 会引发错误,因为 this 不是变量,可能是不可变的。
但是,我想知道为什么 java 不允许上述功能?有什么不好的地方吗?
编辑:这个问题是在参考自然语言处理 (NLP) 上下文时想到的。例如,在法语中,每个动词都必须以“er”、“ir”或“re”结尾。所有动词都有一定的共同特征。但是,每个动词都必须是上述三种类型中的一种。所以在父类“Verb”的构造函数中,我想将创建的对象分类为“ErVerb”、“IrVerb”或“ReVerb”。
【问题讨论】:
-
这没有意义,即使这个特定的代码可以工作,它也会抛出 StackOverflowException。
-
类如何知道它是子类?哪个还没有出生? :P
-
您到底想达到什么目标?
-
首先想到的是它是多么令人困惑。如果我创建一个
Parent对象,我希望它实际上是一个Parent对象,而不是Child对象。如果我想要一个Child对象,我会明确地创建一个。 -
你可能想拥有一个工厂:en.wikipedia.org/wiki/Factory_method_pattern