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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yuchunfeng1221 中级黑马   /  2013-10-16 15:32  /  1643 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yuchunfeng1221 于 2013-10-16 19:24 编辑

用static修饰的方法,可以被重写和重载吗?

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
本帖最后由 loading……99.9 于 2013-10-16 16:16 编辑

JDK提供的帮助文档里好多类的静态方法都有重载,至于重写,刚才回答错了,现在重新编辑下,当我重写的时候,没在静态方法前加@Override没报错,加了这个注解报错,看来静态方法是不能被重写的。
回复 使用道具 举报
本帖最后由 Rockray 于 2013-10-16 17:02 编辑

可以重载。
应该不可以重写,就算形式上写的重写,实际上应该还是父类的实现。就是说静态方法不存在重写覆盖问题,你申明的是什么类型的对象,就调用这个类型的类中的静态方法。
而且,静态方法的调用,始终是看引用型的变量类型。
比如:
Person s = new Student();
s.eat();  //eat()是静态方法
调用的仍是Person类中的eat()静态方法,不管编译还是运行时,都看引用行变量。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以重写静态方法,但重写后的静态方法不支持多态。(其实static根本就没有重写之说。static方法引用的时候应该用类名来引用,而不是对象。同时static方法不参与继承,所以在继承体系里面也不存在重载的说法)
回复 使用道具 举报
  1. class Temp {
  2.        
  3.         public static void setAge(){System.out.println("father");}
  4. }

  5. public class Tempson extends Temp{

  6.         public static void setAge(){System.out.println("son");}
  7.        

  8.         public static void main(String[] args){
  9.                 Tempson t = new Tempson();
  10.                 t.setAge();
  11.         }
  12.        
  13. }
  14. /**eclipse在t.setAge()一行给了一行警告:
  15. The static method setAge() from the type Tempson should be accessed in a static way
  16. 注意用词"should be accessed in a static way" should be 是祈使语气,即建议使用类名而不是对象调用。
  17. 从理论上来说,static方法都属于类属性,应该是没有重写这一说,但是这样写也是可以的,但是eclipse会给警告。
  18. 至于为什么@Overrider报错,这个就不清楚了,注解的底层没有研究过,总之代码行的通,但是理论上很别扭,不建议使用
  19. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 很给力!

查看全部评分

回复 使用道具 举报
不属于复写,因为static修饰的成员,都属于类,但使用上没有区别,区别在内存上。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马