A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

静态方法为啥只能被静态方法重写

7 个回复

倒序浏览
xcvbzbvcx 来自手机 中级黑马 2015-9-20 06:58:52
沙发
罗伊 发表于 2015-9-19 23:55
静态方法为啥只能被静态方法重写

静静等等
回复 使用道具 举报
哥们儿,你还是静静的看看书吧,为了的黑马币的话是可以理解的。不知回答是否满意?
回复 使用道具 举报
a6883767 来自手机 中级黑马 2015-9-20 11:58:54
板凳
因为是静态的,所以只能被静态重写
回复 使用道具 举报
我也是初学的,刚学完不知道理解的对不对,下面是我的一些想法。如果有不对的地方麻烦指正啊。
----------我是分割线------------------------------------------------------------------------------------------

因为静态方法只与类本体绑定,在编译时在方法去确立,与对象无关。
可能你是明白它与类绑定,但疑惑在于“既然如此为什么还能被子类的静态方法复写?不是自相矛盾了吗?”

以下程序或者可以帮到你:

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,这样就跟我上面的理解有些矛盾。。。
回复 使用道具 举报
然而并不是重写,只是看做重写,视频笔记里介绍的很详细吧
回复 使用道具 举报
Zzzack 中级黑马 2015-9-20 22:04:48
7#
还没学到那
回复 使用道具 举报
静态方法在方法区里,先于对象创建
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马