Java方法隐藏但不是静态的

时间:2015-12-05 12:21:31

标签: java oop

我想了解以下内容如何打印HelloWorldExtendedHelloWorld,false。我希望它打印“true”,因为在whichMethod类中覆盖了ExtendedHelloWorld。如果这两个方法都是公共的和静态的,那么我认为它会更有意义,因为那时父方法和子方法都会存在,我会调用父方法,因为我使用的是HelloWorld引用。然而,在这种情况下,方法不是静态的 - 所以我期望被覆盖。无论如何,父方法是私有的,如何从外部调用?有人可以帮忙吗?谢谢!

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;
    }
}

1 个答案:

答案 0 :(得分:3)

您没有扩展whichMethod方法,实际上无法扩展它,因为它是私有的。而且,它不被称为“外部”。主要方法在类中,因此私有方法对main是可见的。如果main方法在别处,则代码将无法编译,因为示例是一个HelloWorld变量,并且其中的私有whichMethod将不可见。