gpt4 book ai didi

java - 复合继承: how to assign a final field at sub-class constructor which depends on 'this' value (backward reference)?

转载 作者:行者123 更新时间:2023-11-30 03:05:43 26 4
gpt4 key购买 nike

我使用复合类来对功能进行分组。
但是,类 A(具有复合 A1)被 B(具有复合 B1)继承,并且 A1 中存在的行为将在 B1 中进行调整,但最终的 a1 必须是 B1 实例才能工作。

观察:我有ways确保复合实例化正确发生(仅由其复合伙伴)。

无法将 B1 对象分配给 a1 最终字段:

class finalFieldTestFails{
class A1{
A1(A a){}
}

class A{
protected final A1 a1;
A(){
this.a1 = new A1(this);
}

A(A1 a1){
this.a1 = a1;
}
}

class B1 extends A1{
B1(B b){
super(b);
}
}

class B extends A{
//B(){ super.a1=new B1(this); } //FAIL: cant change final value
//B(){super(new B1(this));} //FAIL: cant use 'this' or 'super'
}
}

PS:如果可能的话,答案不应涉及反射安全技巧。

最佳答案

B(){ super.a1=new B1(this); } //FAIL: cant change final value

您不能为已分配的最终变量赋值,您可以在构造函数中实例化它,但不能如下所示。

B(){super(new B1(this));} //FAIL: cant use 'this' or 'super'

仅在创建实例后才能使用它。由于有继承树,它没有完全实例化,所以编译器会提示,

在调用父类(super class)型构造函数之前无法引用 this

关于java - 复合继承: how to assign a final field at sub-class constructor which depends on 'this' value (backward reference)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com