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

标签 java

假设我有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/

相关文章:

java - 我想,试图获得重心位置?

java - 在 GPS 和网络之间切换?

java - 浮点正则表达式

java - 为一个 Activity 中的多个列表定义 onItemClick 行为的正确方法?

java - 更快地更新图像像素

java - 为什么要导入内部类?

java - 扩展 AsyncHTTPClient 添加默认成功回调

java - 无法使用 Java 添加/实现 DocuSign 下拉框?

java - 如何以编程方式连续绘制多个矩形?

java - 如何使用自定义参数注释返回自定义 spring 错误响应?