黑马程序员技术交流社区

标题: static方法重写问题 [打印本页]

作者: 周朋飞    时间: 2012-6-28 11:51
标题: static方法重写问题
看起来显示了一个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方法不能被重写,只能被重定义,但我不知道重写和重定义有什么区别
作者: 赵庆礼    时间: 2012-6-28 12:03
1. 重写 (override):
      父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。
1) 被重写的函数不能是 static 的。
2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)
3) 重写函数的访问修饰符可以不同。

2. 重定义 (redefining):
      子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
      重定义后子类调用的函数是子类自己的函数,父类的函数会被隐藏。名字隐藏特性。如果想调用父类的该同名函数,需要用父类加上作用域来指定调用的函数。





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