黑马程序员技术交流社区

标题: 静态方法为什么不可以覆盖 [打印本页]

作者: 曹奎    时间: 2013-7-25 11:25
标题: 静态方法为什么不可以覆盖
静态方法为什么不可以覆盖?

作者: yinjiek    时间: 2013-7-25 12:48
静态不能调用实例化,静态就像是共享,像a,b,c,d是一个家庭。A拿100块钱出来,B用了10块,C用了10块,D用了10块,那这100还有多少钱?还有70.
实例化就是像A,B两个人;A有10块,B有10块,A拿10块买了烟,关系B的10块钱吗?没关系。
静态有继承,但是不需要继承,静态就是一体化,最后赋值是多少它就是多少 ,所以不能被覆盖了;
作者: 施大勇    时间: 2013-7-25 15:22
问:静态方法为什么不可以覆盖?
       静态方法是与类同时加载进内存的,它可以由类名直接调用,不管对象是否存在,它都存在于内存中,它优先于对象的存在而存在。重写一般都是子类对象有了新的要求,所以重写的方法都是非静态的。
       在子类中写一个与父类静态方法一样的方法,子类对象调用时会调用子类中的方法,这样好像的重写了一样。其实这不是重写,静态方法是由类名调用的,它是伴随类的存在而存在的,是每一个类自己的方法,因此静态方法重写没有意义。

作者: 深圳在漂移    时间: 2013-7-25 17:02
静态方法是不能被覆盖的!
在SUN的SL-275中明确写道:
you CANNOT override a STATIC method but you can hide it!
作者: yangchao313    时间: 2013-7-25 17:44
静态方法只与定义时所在的类相关,在编译期就已经绑定到某个类。可以继承,但不能在子类中被同名方法覆盖.

作者: chilong_333    时间: 2013-7-25 18:03
亲啊,静态方法是不可以覆盖的,不过可以隐藏。
作者: 十甫寸    时间: 2013-7-25 19:08
因为不允许被使用者重新定义,但是可以隐藏!
作者: luckwei    时间: 2013-7-26 13:32
其实,静态的不是叫覆盖而是隐藏。在表现形式上说:隐藏用于静态方法,覆写用于非静态方法。职责上说:隐藏的目的是为了抛弃父类静态方法,重现子类方法。静态方法虽然不能覆写,但是可以隐藏;
package itcast.com;
public class BaseStatic {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Base b = new Sub();
  b.Method();
  b.staticMethod();
}
}
class Base{
public static void staticMethod(){
  System.out.println("父类静态的方法");
  
}
public void Method(){
  System.out.println("父类的非静态方法");
}

}  
class Sub extends Base{
public static void staticMethod(){
  System.out.println("子类的静态方法");
}
public void Method(){
  System.out.println("子类的非静态方法");
}
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2