Java,继承和实例方法.为什么我的方法不会继承?

gat*_*353 1 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
Run Code Online (Sandbox Code Playgroud)

当我运行Three时,我得到:非静态方法outPrint()不能从静态上下文中引用.这当然是因为编译器将outPrint()视为实例成员.如果我将关键字"static"添加到outPrint()方法标题中,整个过程就可以了.

这就是我的困惑所在.它似乎不仅仅是不可继承的构造函数,而且还有它的所有实例成员.有人能解释一下这对我好一点吗?有没有涉及使用"静态"的解决方法?我尝试了一些"超级"的实验无济于事.提前致谢!

Bri*_*new 5

您需要实例化要调用的对象.

例如

Three t = new Three();
t.outPrint();
Run Code Online (Sandbox Code Playgroud)

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

请注意,您可以证明这Three One因为:

One t = new Three();
t.outPrint();
Run Code Online (Sandbox Code Playgroud)

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