Java中的继承。 2个无法访问彼此的替代方法的孩子

时间:2018-12-09 22:49:07

标签: java

假设我有class/interface Aextended/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 Cclass D的实例作为参数构造的,该实例被设置为该{{1}的实例的类变量}不断从中获取数据。我不希望class B的这个实例能够调用其类变量对象class D的{​​{1}}。

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