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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 吴愿涛 于 2012-11-14 14:08 编辑

java中父类的静态方法能不能被重写 ?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 鼓励一下哈 !

查看全部评分

8 个回复

倒序浏览
可以的啊,子类覆盖父类,必须保证子类权限大于等于父类。父类的方法为静态,子类在覆盖的时候也必须用静态。
而且覆盖的时候必须保证返回值,函数名,参数列表完全相同才可以,只有内容可以不同,由子类去实现自己特有
的一些功能。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
zyh362048474 + 1 赞一个!
奋斗的青春 + 1 很给力!

查看全部评分

回复 使用道具 举报
我也说说我的理解吧,不知到对不对哈,
子类继承父类后,子类将拥有父类的所有方法,父类的方法 ,子类里也有,如果子类想改变父类中的某一个方法的功能的话,子类就要对那个功能进行复写,静态方法也应该不例外,不然的话,如果子类没有复写那个方法,当子类使用那个方法的时候,虚拟机将使用父类中的方法。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
zyh362048474 + 1 赞一个!
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以把想复写的父类中的静态方法定义为抽象方法,abstract  static void 方法名(); 让后把父类本身也定义为abstract抽象类。这时候抽象的父类本身是不能用来创建对象的,可以调用子类来创建对象,在子类中继承父类的抽象方法进行重写。(即:可以把函数主体不确定,但是子类中所共有的方法定义为父类中的抽象方法,然后由子类重写。)

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
能复写静态方法的,除了构造方法其他的方法都能复写,但是要注意就是不能用非静态方法复写静态方法
回复 使用道具 举报
可以,只要满足重写的要素就可以重写.
重写:
(1)在父子类之间(必须是继承关系)
(2)方法的重写如果访问修饰符是private那么是不能重写的,除此之外要求子类访问修饰符比父类大或者一样
(3)除了访问修饰符有要求,其他必须相同;
  1.方法名相同
  2.方法的参数列表一定相同
  3.方法重写的返回值一定相同
满足这个条件就能重写的

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王玮 中级黑马 2012-11-14 17:35:24
7#
当然可以的~
static只是说明方法的内存位置。保证其方法可以被以类名.方法名的方式访问。而对于是否可以被继承和重写,要看其public、 protected、 private权限修饰符,当不为private是可以被子类访问的。当此方法被fina 修饰符修饰的时候,它就不能被重写了。
这是我的理解哦~呵呵~

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
其实是可以重写父类中的静态方法,但是是没有实际意义的,静态方法可以不创建对象直接  类名.静态方法名();而即使是创建了对象 调用的也还是父类中原来的也就是没有复写前的方法。 比如:  父类 zi=new  子类();
                            zi.static方法();
这个程序输出的还是父类中被复写前的静态方法内容。
回复 使用道具 举报
陈军 中级黑马 2012-11-15 10:02:38
9#
张学永 发表于 2012-11-14 13:48
可以的啊,子类覆盖父类,必须保证子类权限大于等于父类。父类的方法为静态,子类在覆盖的时候也必须用静态 ...

返回值,可以不完全相同的。只要返回类型是被复写方法返回类型的子类,也是可以的

评分

参与人数 1黑马币 +1 收起 理由
zyh362048474 + 1 很给力!

查看全部评分

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