我也是初学的,刚学完不知道理解的对不对,下面是我的一些想法。如果有不对的地方麻烦指正啊。
----------我是分割线------------------------------------------------------------------------------------------
因为静态方法只与类本体绑定,在编译时在方法去确立,与对象无关。
可能你是明白它与类绑定,但疑惑在于“既然如此为什么还能被子类的静态方法复写?不是自相矛盾了吗?”
以下程序或者可以帮到你:
package PackageDemo1;
public class FatherSonTest {
public static void father(){
System.out.println("a");
}
public static void main(String[] args){
FatherSonTest a = new SonTest();
a.father();
FatherSonTest b = new FatherSonTest();
b.father();
SonTest.father();
FatherSonTest.father();
Class c = a.getClass();
Class d = b.getClass();
System.out.println(c);
System.out.println(d);
}
}
class SonTest extends FatherSonTest{
public static void father(){
System.out.println("b");
}
}
输出
a
a
b
a
class PackageDemo1.Sontest
class PackageDemo1.FatherSonTest
前面两个aa表明了就算你是子类的静态方法“重写”了父类的静态方法,只要变量是声明在父类FatherSonTest上,就会调用父类的.father()。
想要调用SonTest的father(),则需要用SonTest.father()或创建子类的对象。
---------------------------------------------------------------------------------------
但同时我也有一点不明白,就是程序里两个getClass,一个返回SonTest,一个返回FatherSonTest,这样就跟我上面的理解有些矛盾。。。 |