假设我有class/interface A
和extended/implemented
分别为class B
的{{1}}。 class C
包含Class/interface A
。有没有办法让method X
没有主体(method X
),因此必须由X();
和class B
实现,但不能给class C
和{ {1}}(或除class B
以外的任何其他类)可以访问彼此的class C
?
class/interface A
我不确定上面用问号表示的修饰符,也不确定A应该是类还是接口。
编辑:
此外,在method X
中创建了类B和C的实例。 ? class/interface A {
? X();
}
? class B extends/implements class/interface A {
@Override
? X() {
...code...
}
}
? class C extends/implements class/interface A {
@Override
? X() {
...code...
}
}
中class D
的实例是用class C
中class D
的实例作为参数构造的,该实例被设置为该{{1}的实例的类变量}不断从中获取数据。我不希望class B
的这个实例能够调用其类变量对象class D
的{{1}}。
答案 0 :(得分:1)
提供的类B和C与类A不在同一个包中,您可以在A中制作受X
保护的抽象。
这意味着您需要使A为抽象的 class 而不是接口,因为接口方法始终是公共的。
因此您将获得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
,但是您需要将它们分别转换为{ {1}}才能呼叫A
。
X