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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹奎 中级黑马   /  2013-7-25 11:25  /  1569 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态方法为什么不可以覆盖?

评分

参与人数 1黑马币 +3 收起 理由
神之梦 + 3 最好不要简单的问一句话

查看全部评分

7 个回复

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

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
静态方法是不能被覆盖的!
在SUN的SL-275中明确写道:
you CANNOT override a STATIC method but you can hide it!
回复 使用道具 举报
静态方法只与定义时所在的类相关,在编译期就已经绑定到某个类。可以继承,但不能在子类中被同名方法覆盖.
回复 使用道具 举报
亲啊,静态方法是不可以覆盖的,不过可以隐藏。
回复 使用道具 举报
因为不允许被使用者重新定义,但是可以隐藏!
回复 使用道具 举报
其实,静态的不是叫覆盖而是隐藏。在表现形式上说:隐藏用于静态方法,覆写用于非静态方法。职责上说:隐藏的目的是为了抛弃父类静态方法,重现子类方法。静态方法虽然不能覆写,但是可以隐藏;
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("子类的非静态方法");
}
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马