不能,因为静态静态方法在类被装载时就已经加载,而非静态在运行时系统确定具体的内容。两种方法内存管理机制完全不同,所以不能覆盖。
这个问题我也纠结过,以上解答也是从网上看到的,静态先与类存在,而非静态方法的重写是在类加载之后才会出现的所以说不同的两种机制。
你看下面的代码:
class A{
public static void show(){
System.out.println("a show");
}
public void method(){
System.out.println("a.method");
}
}
class B extends A{
public static void show(){
System.out.println("b show");
}
public void method(){
System.out.println("b.method");
}
}
public class Demo {
public static void main(String[] args){
new B().method();//方法重写输出的是b.method
A a=new B();
a.show();//静态方法,输出结果为a show,说明静态方法没有被重写,如果去掉两个静态就会输出b show了
不知道有没有解释清楚 |