隐藏但不是静态的Java方法

标签 java oop

我试图了解下面的代码如何打印 HelloWorldExtendedHelloWorld,false。我希望它打印“true”,因为 whichMethodExtendedHelloWorld 类中被覆盖了。如果这两个方法都是公共(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/

相关文章:

java - 在 Android Studio 中,方法注释未显示在智能感知中

java - 一个类的多个实例填充了来自 application.properties 的值

javascript - JQuery UI Widget Factory 替代品

python - 如何在运行时就地更改类实例行为?

python - 将类的实例存储在类变量中是一个好的模式

java - 方法调用者和被调用者,循环类级别方法调用

java - TreeMap 可以用来检索给定键值以上的所有键/值对吗?

java - ThreadPoolExecutor与Android的线程优先级

c++ - 指针和面向对象编程

oop - 方案 : is OOP possible in Scheme? 中的方法和属性