假设我有class/interface A,也就是class B和class C的extended/implemented。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应该是类还是接口。
编辑:--另外,类B和C的实例是在class D中创建的。class C在class D中的实例是以class D中的class B实例作为参数来构造的,它被设置为一个类变量,这个class C实例不断地从中获取数据。我不希望class C的这个实例能够调用它的类变量对象B的method X。
发布于 2018-12-10 02:38:12
如果类B和C不存在于类A的同一个包中,则可以将X保护抽象为A。
这意味着您需要使A成为一个抽象类,而不是接口,因为接口方法总是公开的。
所以你会得到A:
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()
}
}https://stackoverflow.com/questions/53697464
复制相似问题