分配操作员和"这个"关键词

时间:2015-02-10 17:18:19

标签: java theory

请考虑以下代码段:

class Parent {
    Parent() {
        this = new Child();
    }
}
class Child extends Parent { }

上面会抛出语法错误:The left hand side of an assignment operator must be a variable

在java中,this关键字存储当前调用对象的内存地址。我希望用类的实例覆盖当前对象。子类。我理解上面的代码片段会抛出错误,因为this不是变量,可能是不可变的。

但是,我想知道为什么java不允许上述功能?它有什么缺点吗?

编辑:这个问题在我看来是参考自然语言处理(NLP)上下文。例如,在法语中,每个动词都必须以' er,' ir'或者'。所有动词都有一些共同的特征。但是,每个动词必须是上述三种类型中的一种。因此,在父类' Verb'的构造函数中,我想将创建的对象分类为' ErVerb' IrVerb'或者' ReVerb'。

2 个答案:

答案 0 :(得分:7)

有两种情况:

如果让this实例化为任何Object,不一定是类型层次结构中的this,那么实例化将无法保证其引用的内容。这打破了一些事情,最明显的是面向对象编程的整个概念。

如果限制StackOverflowError被实例化为父类的任何子类,那么该子类构造函数将无限次地调用父构造函数,从而导致{{1}}。

答案 1 :(得分:2)

在父构造函数中构造子类实例并将实际父实例替换为创建的子实例是没有任何意义的。

尽管在评论和其他答案中指出了令人讨厌的StackOverflowError,但这样做没有用例。通常,在创建父项时创建子项是荒谬的(从逻辑的角度来看)。

考虑以下推理

一辆特定的汽车正在工厂组装。组装特定汽车的过程包括许多步骤。

其中一些步骤仅在组装特定车辆时发生,而其他步骤在组装特定车辆和组装其他车辆(例如特定车辆)时都会发生。

现在让我们假设在组装许多车辆(包括特定车辆和特定货车)时发生的这些一般步骤之一表明我们必须组装一辆新的特定货车并让它成为普通车辆。组装

现在,我们正在组装的特定车型将成为这款新的特定货车。但是,汽车不可能成为面包车=>的荒谬即可。