关于覆写静态方法的问题public class StaticTest {public static voidtest(){}public static void main(St
关于覆写静态方法的问题
public class StaticTest { public static void test(){ } public static void main(String[] args){ new test().test(); } } class test extends StaticTest{ public void test(){ } } //Exception in thread "main" java.lang.Error: Unresolved compilation problem: //This instance method cannot override the static method from StaticTest // //at test.test(StaticTest.java:10) //at StaticTest.main(StaticTest.java:6)
我知道静态方法是没有多态的,求高人解释,JAVA为什么要这样设计, 使得我用一个子类去继承一个父类的时候,当我把子类的一个非静态方法的签名与父类的静态方法签名一样的时候,会报错? [最优解释] 如果你子类没有test方法,通过 StaticTest t = new test; t.test();//虽然不建议这样使用静态方法,但存在这样的用法
public class StaticTest { public static void test() //也可以直接去掉static { System.out.println("------------"); } public static void main(String[] args){ new test().test(); } } class test extends StaticTest { public void test1() //可以这样改 { System.out.println("____________________"); } } [其他解释] 记住这个
public class StaticTest { public static void test(){ System.out.println("test from StaticTest") } public void test2(){ System.out.println("test2 from StaticTest"); } } class test extends StaticTest{ public static void test(){ System.out.println("test from test") }
public void test2(){System.out.println("test2 from test")} } test es = new test(); es.test();//调用子类的静态方法 StaticTest st = new test(); st.test();//调用父类的静态方法 st.test2();//调用子类的方法
注意,静态方法是属于类的,所以也叫类方法,所以st.test()没有体现出多态 [其他解释]
class MyTest { public static void test(){ System.out.println(1); }
} class Test extends MyTest{ public static void main(String[] args){ Test t = new Test(); t.test(); } public static void test(){ System.out.println(2); }
}
静态方法,无法多态,结果是1;
class MyTest { public static void test(){ System.out.println(1); }
} class Test extends MyTest{ public static void main(String[] args){ Test t = new Test(); t.test(); } public static void test(){ System.out.println(2); }
}
非静态方法,就正常啦,结果是2. [其他解释] 哦哦哦,两个程序第9行的代码都应改为MyTest t = new Test(); 其他不变。 [其他解释] 楼说解释的都很好,LZ你不觉得如果这样会很混乱么? 简单地说,因为 static 方法是属于类的,每个对象都拥有。也就是说,你每new 一个 对象,他就自带地有那个static方法了。当然不能去改变。(我这里说的改变,意思是说,应该让类去改变,而不是让某个对象去改变)。