假设我有class/interface A
即extended/implemented
通过class B
和class C
。 Class/interface A
包含method X
。有没有办法拥有method X
没有主体( X();
),因此必须由 class B
实现和class C
,但不给 class B
和class 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
的这个实例能够调用其类变量对象 B
的method 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/