我试图了解下面的代码如何打印 HelloWorldExtendedHelloWorld,false
。我希望它打印“true”,因为 whichMethod
在 ExtendedHelloWorld
类中被覆盖了。如果这两个方法都是公共(public)的和静态的,那么我认为这会更有意义,因为那时父方法和子方法都将存在并且我将调用父方法,因为我正在使用 HelloWorld
引用。然而,在这种情况下,这些方法不是静态的 - 所以我期待然后被覆盖。反正父方法是私有(private)的,外面怎么调用呢?有人可以帮忙吗?谢谢!
public class HelloWorld {
public HelloWorld() {
System.out.print("HelloWorld");
}
public HelloWorld(int age) {
System.out.print("HelloWorldAge");
}
private boolean whichMethod() {
return false;
}
public static void main(String[] args) {
HelloWorld example = new ExtendedHelloWorld(5);
System.out.println("," + example.whichMethod());
}
}
class ExtendedHelloWorld extends HelloWorld {
public ExtendedHelloWorld(int age) {
System.out.print("ExtendedHelloWorld");
}
public boolean whichMethod() {
return true;
}
}
最佳答案
您没有扩展 whichMethod 方法,实际上不能扩展它,因为它是私有(private)的。此外,它不被称为“外部”。 main 方法在类中,因此私有(private)方法对 main 可见。如果 main 方法在其他地方,您的代码将无法编译,因为 example 是一个 HelloWorld 变量,并且其中的私有(private) whichMethod 将不可见。
关于隐藏但不是静态的Java方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34104822/