继承在Java不工作,我希望
问题描述:
我有下面的类方式:继承在Java不工作,我希望
public class X {
public void A() {
B();
}
private static void B() {
System.out.println("111111111");
}
}
现在我有以下的继承类Z:
public class Z extends X {
private static void B() {
System.out.println("22222222");
}
}
现在,如果我做
Z myClass = new Z();
Z.A();
我将得到:111111111作为结果。 (另外,eclipse告诉我,继承类中的B()永远不会被调用)。
为什么?我怎样才能运行继承的B方法?
答
更改方法的访问修饰符从private static
到protected
如果重新定义基类的非静态的派生类&非私有方法,这就是所谓的覆盖。
如果重新定义派生类的基类的静态方法,这就是所谓的方法隐藏或方法阴影。
你已经完成了隐藏,而不是在你的例子中重写。
看一看这个SE Question
答
看起来你是在Z类,但方法B()这里没有覆盖重写方法B()。由于B()是静态的,因此A类和Z类都有自己的方法B()。所有静态方法和变量的范围都是类级别而不是对象级别。
静态方法不是多态调用的。编译时它们是静态绑定的。使用实例方法。并且不要私有:私有方法是私有的,因此不能被覆盖。 https://docs.oracle.com/javase/tutorial/java/IandI/override.html –