【发布时间】:2015-07-10 08:13:26
【问题描述】:
变得很困惑...我读到静态方法不会覆盖,但在下面的程序中它不遵循该规则...谁能详细解释一下。这是程序
程序的输出是A 类方法输出。
public class JavaApplication6 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
A a=new B();
a.r();
}
}
class B extends A{
static int d=200;
static void r(){
System.out.println("hiiiiiiiiiiiiiiiii r"+d);
}
}
class A {
static int a=10,c=20;
static void r(){
System.out.println("hiiii ar"+a);
}
}
【问题讨论】:
-
如果输出来自 A 的方法,那么它不会被覆盖。
-
在我的笔记本电脑上,您的程序生成了“hiiii ar10”,这意味着 A.r() 可以工作。所以结果确实表明静态方法没有发生覆盖。
-
关键字
extend表示继承,而不是覆盖。此外 - 这两个类不是static- 它们有static方法,但类本身不是静态的。 -
如果你添加@Override,那么问题可能会出现
标签: java