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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周朋飞 中级黑马   /  2012-6-28 11:51  /  2392 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看起来显示了一个static 方法被重写了
class Base
{
   public static void stamethod()
  {
     System.out.println("Base");
  }
}
public class ItsOver extends Base
{
   public static void main(String argv[])
  {
    15
     ItsOver so = new ItsOver();
    so.stamethod();
  }
  public static void stamethod()
  {
   System.out.println("amethod in StaOver");
  }
}

这段代码会被编译并且输出"amethod in StaOver",
但我认为这就是重写,也不是覆盖,因为我修改了子类中的static方法的访问修饰符,但它符合重写的规则,
但在SCJP java 5 的指导书中,说static方法不能被重写,只能被重定义,但我不知道重写和重定义有什么区别

2 个回复

倒序浏览
1. 重写 (override):
      父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。
1) 被重写的函数不能是 static 的。
2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)
3) 重写函数的访问修饰符可以不同。

2. 重定义 (redefining):
      子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
      重定义后子类调用的函数是子类自己的函数,父类的函数会被隐藏。名字隐藏特性。如果想调用父类的该同名函数,需要用父类加上作用域来指定调用的函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马