gpt4 book ai didi

java - 无法实现或扩展 - java

转载 作者:行者123 更新时间:2023-12-01 11:09:36 25 4
gpt4 key购买 nike

我有一个类C,有很多成员(比如说10个成员)+仅在C中的成员

我还有两个类 AB,它们恰好具有上述 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 时,我需要设置 AB 中所有成员的值,例如

aObject.setMember10(cObject.getMember10());
bObject.setMember1(cObject.getMember1());
... and so on for all 10 members

这看起来很糟糕(长期和将来如果我向 C、A、B 添加更多成员,我需要为它们编写 setter)。所以我的想法是,如果我有类 C 扩展或实现 A 和 B 我可以cast 它就像

 A aObject = (A)cObject;
B bObject = (B)cObject;

但问题是

  1. Java 不允许多重继承
  2. 我无法将 AB 作为接口(interface),因为我需要设置它们的值。 (如果我将它们作为接口(interface),它们的成员将成为 final,这意味着我无法更改它们的值)
  3. 我无法扩展一个类并实现另一个类。 (然后我无法设置接口(interface)成员的值)

我现在能做什么?

谢谢..

最佳答案

据我了解,您有两个类 AB,它们都有许多字段,并且您想创建第三个类 C 包含 AB 的所有字段。

正如您所指出的,您不能通过 Java 中的继承来做到这一点,因为不支持状态的多重继承。

您可以使用组合来完成类似的操作。

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();
}

...
}

我不确定这是否是一个好主意或您需要什么。我们需要有关您的用例的更多信息。

编辑

如果 AB 具有 C 中没有的字段,您可以创建一个包含所有字段的类 A2 AC 共有的字段以及包含 B 共有的所有字段的类 B2 C,像这样:

public final class A {

private final A2 a2;
// other fields

public A(A2 a2) {
this.a2 = a2;
}
}

public final class B {

private final B2 b2;
// other fields

public B(B2 b2) {
this.b2 = b2;
}
}

public final class C {

private final A2 a2 = new A2();
private final B2 b2 = new B2();

...

public void setMember7(String s) {
b2.setMember7(s);
}

public String getMember7() {
return b2.getMember7();
}

...

public A getA() {
return new A(a2);
}

public B getB() {
return new B(b2);
}
}

关于java - 无法实现或扩展 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529878/

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