如果这个问题可能一直被问到,我很抱歉,但我搜索并找不到足够的答案。
如果公共成员/方法正在访问私有成员/字段,如何禁用它们的继承?
所以考虑一下:
public class A {
private MemberA a = new MemberA();
public void foo(TypeA x) {
a.methodCall(); //access to a
}
}
public class B extends A {
private MemberB b = new MemberB();
public void foo(TypeB x) {
b.methodCall();
}
}
如果你点击调试器,你会看到,B 有一个字段 a,类型为 MemberA。这符合 Java 规则,因为如果公共成员可以访问私有成员,它将被继承。但是在 B 中,“a”是无用的,只会占用内存——即使你没有在 B 的构造函数中实例化它,因为 B 调用它是超级构造函数,并且它必须在 A 中实例化,因为 a 对 a 有很大用处。
我需要A 和 B 具有相同的方法名称,并且它们必须是公共的,但是由于它们做了根本不同的事情但也共享共同的逻辑 B 需要从 A 继承。
所以基本上,我需要知道如何同时重载和覆盖一个方法。或者重复代码。该怎么办?