JAVA关于静态方法的问题~

2025-05-05 02:07:36
推荐回答(4个)
回答1:

什么叫静态方法?即类的方法
换句话说,有没有实例存在都是不重要的

看你的代码
Jay j = new Jay();
Singer s = new Jay();

何必要new出实例呢?没有实例照样可以调用静态方法,并且,不管实例是什么类型,只看你的引用是什么类型
j.sing(),因为j这个引用属于Jay 类型,所以调用的是Jay的静态方法
s.sing(),因为s这个引用属于Singer 类型,所以调用的是Singer的静态方法

跟它new出来的对象是无关的

回答2:

关键在于static方法.这个方法并不属于new Jay()的个人所有.它可以看成是公共的.

于是你定义的Singer s
s这个引用在找这个方法的时候它会去 Singer类[注意,这儿不是Singer类的对象,而是Singer本身]中去找这个sing()的方法.

-----------------------------------

于此对应的,假如sing方法不是static型的.

那么Singer s = new Jay();
s.sing()在调用的时候;(尽管s并不知道自己指向的是Jay型,它只把它当作是Singer型.当然这并不重要.),会去new 出来的Jay()对象[注意,此处是指Jay生成的实例,这也就是与上面不同的原因]中找sing的方法.

这个Jay型的对象中的sing()方法已经覆盖了父类的方法.所以结果会是'fa'

回答3:

一句话:静态方法根本就没有继承。哪来重写一说?

回答4:

System.out.println(Test.sing() + " " + Singer.sing());
这么写不就完了