Liny_@NotePad

沉迷ACG中

限定 Override 父类方法 - Override

YOYO posted @ 2008年8月18日 09:39 in 【Java SE】 with tags override 重写 , 2009 阅读

【本文来自Gossip@caterpillar的Java Gossip】http://caterpillar.onlyfun.net/GossipCN/JavaGossip-V2/JavaGossip2.htm
java.lang.Override是J2SE 5.0中标准的Annotation型态之一,它对编译器说明某个方法必须是重新定义父类别中的方法,编译器得知这项资讯后,在编译程式时如果发现该方法并非重新定义父类别中的方法,就会回报错误。

举个例子来说,如果您在定义新类别时想要重新定义toString()方法,您可能会写成这样:

CustomObject.java 

  1. public class CustomObject {
  2.     public String ToString() {
  3.         return "customObject";
  4.     }
  5. } 

在撰写toString()方法时,您因为打字错误或其它的疏忽,将之打成了ToString(),但您编译这个类别时并不会出现任何的错误,编译器只当您是定义了一个新的ToString()。

您可以使用java.lang.Override这个Annotation型态,在方法上加上一个@Override的Annotation,告诉编译器您现在定义的这个类别是重新定义父类别中的同名方法,例如:

CustomObject.java

  1. public class CustomObject {
  2.     @Override
  3.     public String ToString() {
  4.         return "customObject";
  5.     }
  6. }

在编译程式时,编译器看到@Override这个Annotation,了解它必须检查这个方法是不是重新定义父类别的ToString()方法,但父类别中并没有这个方法,所以它会回报错误:

CustomObject.java:2: method does not override a method from its superclas
@Override
^
1 error

重新修改一下程式,编译时就不会有问题了:

CustomObject.java 

  1. public class CustomObject {
  2.     @Override
  3.     public String toString() {
  4.         return "customObject";
  5.     }
  6. }
java.lang.Override是个Marker annotation,简单的说就是用于标示,annotation名称本身即包括了要给工具程式的资讯。

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter