【发布时间】:2013-07-04 13:09:10
【问题描述】:
我是一名本科生,试图了解 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
当我运行 3 时,我得到:无法从静态上下文引用非静态方法 outPrint()。这当然是因为编译器将 outPrint() 视为实例成员。如果我将关键字“static”添加到 outPrint() 方法标头,那么整个事情就可以正常工作了。
这就是我的困惑所在。似乎不仅仅是不可继承的构造函数,还有它的所有实例成员。谁能更好地向我解释一下?是否有不涉及使用“静态”的解决方法?我尝试了一些“超级”实验,但无济于事。提前致谢!
【问题讨论】:
-
简单的建议。也许您的老师建议(或强迫)您将 cmets 放在每个大括号的末尾,但这对程序员来说是噪音。注释用于可能不清楚的事情,例如解释算法。如果您的代码缩进良好(制表符、换行符等),那么这些 cmets 确实是不必要的。
-
这是推荐的,但它也有助于我在必须调试时阅读代码。在这个例子中,这似乎是多余的,但我发现当我有几百行或更多代码时,我可以更好地区分代码块。尤其是在控制结构方面。当我进入职业世界时,我确信我必须改变我的习惯!感谢您的建议!
标签: java inheritance static-methods extends instance-methods