我有一个班级C
,有很多成员(比如10个成员)+只有C的成员
我还有两个课程A
和B
,其中包含上述10个成员。 (A和B各有10个成员。这10个成员分布在A和B中,A和B几乎没有其他领域)
class C {
private int member1;
private String member2;
private String member3;
private float member4;
...
private String member10;
private member11_only_in_C;
private member12_only_in_C;
...
}
class A {
private String memeber10;
private float member4;
private double member6;
....
}
class B {
private int memeber1;
private String memeber2;
private String member7;
....
}
所以当我cObject
时,我需要设置A
和B
中所有成员的值,如
aObject.setMember10(cObject.getMember10());
bObject.setMember1(cObject.getMember1());
... and so on for all 10 members
这看起来很糟糕(很长时间以后如果我向C,A,B添加更多成员,我需要为它们编写setter)。所以我的想法是如果我有C级extend or implement A and B
我可以cast
喜欢
A aObject = (A)cObject;
B bObject = (B)cObject;
但问题是
A
和B
作为接口,因为我需要设置它们的值。 (如果我将它们作为接口,它们的成员将变为final
,这意味着我无法更改它们的值)我现在能做什么?
谢谢..
答案 0 :(得分:1)
根据我的理解,你有两个课程A
和B
,两个课程都有很多字段,你想要创建第三个课程C
,其中所有字段都是{{ 1}}和A
。
正如您所指出的那样,您不能在Java中继承这样做,因为不支持多重继承状态。
您可以使用合成来做类似的事情。
B
我不确定这是一个好主意还是你需要的东西。我们需要有关您的用例的更多信息。
修改强>
如果public final class C {
private final A a;
private final B b;
public C(A a, B b) {
this.a = a;
this.b = b;
}
...
void setMember7(String s) {
b.setMember7(s);
}
String getMember7() {
return b.getMember7();
}
...
}
和A
的字段不在B
,则可以创建一个包含C
和{{A2
共有字段的A
个字段1}}和一个C
类,其中包含B2
和B
共有的所有字段,如下所示:
C
答案 1 :(得分:0)
我不知道你想要什么,但我认为你需要的东西可以在构造函数中完成
Class A{
private member1;
private member10;
Class A(){
}
Class A(C cObject){
member1 = cObject.getMember1();
//the rest of member varaibles you want to set
member10 = cObject.getMember10();
}
}
Class B{
private member1;
private member10;
Class B(){
}
Class B(C cObject){
member1 = cObject.getMember1();
//the rest of member varaibles you want to set
member10 = cObject.getMember10();
}
}
使用它: -
B objectB = new B(objectC);
A objectB = new A(objectC);