Java、继承和实例方法。为什么我的方法不能继承?

标签 java inheritance static-methods extends instance-methods

我是一名本科生,正在尝试了解 Java 中的继承。 docs.oracle 站点说类的所有成员都是继承的,构造函数除外。这是有道理的。问题是我做了一个实验,但没有成功。在这里:

public class One{
    public void outPrint(){
        System.out.println("Hello World!");
    }//end outPrint
}//end One.java

public class Two extends One{
    //empty
}//end Two.java

public class Three extends Two{
    public static void main(String[]args){
        outPrint();
    }//end main
}//end Three.java

当我运行三时,我得到:无法从静态上下文中引用非静态方法 outPrint()。这当然是因为编译器将 outPrint() 视为实例成员。如果我将关键字“static”添加到 outPrint() 方法 header ,整个过程就可以正常工作。

这就是我的困惑所在。似乎不仅仅是不可继承的构造函数,还有它的所有实例成员。任何人都可以向我解释一下吗?有没有不涉及使用“静态”的解决方法?我尝试了一些“ super ”的实验,但无济于事。提前致谢!

最佳答案

您需要实例化一个要调用的对象。

例如

Three t = new Three();
t.outPrint();

您定义的 main() 方法是静态的,没有对象的实例 (One/两个/三个)。它仅存在于特定的命名空间中。

请注意,您可以证明 Three is-a One 因此:

One t = new Three();
t.outPrint();

如果您重写每个子类的 outPrint() 方法,您可以根据实例化和/或引用原始对象实例的方式看到调用了哪个方法。

关于Java、继承和实例方法。为什么我的方法不能继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471161/

相关文章:

java - 访问父类(super class)的私有(private)成员

php - 在php中调用父静态方法

java - 深度优先搜索导致 StackOverFlowError

保存到类实例变量的静态方法的 Objective-C 结果在使用时给出 "EXC_BAD_ACCESS"

java - 只是我想在 Maven 项目构建失败时创建目标

java - java中()->{}代表什么?

Java - 从 JTextArea 检索和显示信息

javascript - vue js中按特定名称过滤vcard

具有相同方法名称的不同类的Java程序在继承的情况下

c# - 静态方法作为契约(Contract)的一部分