gpt4 book ai didi

java - Java 中的继承。 2 个子级无法访问彼此的重写方法

转载 作者:行者123 更新时间:2023-12-02 10:29:23 26 4
gpt4 key购买 nike

假设我有class/interface Aextended/implemented通过class Bclass CClass/interface A包含method X 。有没有办法拥有method X没有主体( X(); ),因此必须由 class B 实现和class C ,但不给 class Bclass C (或除 class/interface A 之外的任何其他类)对彼此的 method X 的访问?

? class/interface A {
? X();
}

? class B extends/implements class/interface A {
@Override
? X() {
...code...
}
}

? class C extends/implements class/interface A {
@Override
? X() {
...code...
}
}

我不确定修饰符,上面用问号表示,并且我不确定 A 应该是类还是接口(interface)。

编辑:此外,类 B 和 C 的实例是在 class D 中创建的。 。 class C的实例在class D是用 class B 的实例构造的在class D作为参数,它被设置为类变量,class C的这个实例不断地从中获取数据。我不想要 class C 的这个实例能够调用其类变量对象 Bmethod X .

最佳答案

如果类 B 和 C 与类 A 不在同一个包中,您可以在 A 中将 X protected 抽象化。

这意味着您需要将 A 设为抽象而不是接口(interface),因为接口(interface)方法始终是公共(public)的。

所以你会得到一个:

package a.b.c

public abstract class A {
protected abstract Foo X();
}

在新包中创建B

package a.b.d

public class B extends a.b.c.A {
// ... implement X
}

在不同的包中创建 C

package a.b.e

public class C extends a.b.c.A {
// ... implement X
}

现在,如果您希望类 D 能够调用 X,您需要将 D 放在与 A 相同的包中,即 a.b.c,但您需要将它们中的每一个强制转换为 A 以调用 X

package a.b.c

public class D {
public D(a.b.d.B b, a.b.e.C c) {
// ... call ((A)b).X() or ((A)c).X()
}
}

关于java - Java 中的继承。 2 个子级无法访问彼此的重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697464/

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