代码之家  ›  专栏  ›  技术社区  ›  JDelage

Java:什么是“超驰”?[副本]

  •  7
  • JDelage  · 技术社区  · 15 年前

    可能重复:
    What's “@Override” there for in java?

    到目前为止,我从未将“@override”置于方法之前。我看到一些代码示例,但我不理解它的实用性。我想解释一下。

    非常感谢,

    J延迟

    5 回复  |  直到 15 年前
        1
  •  7
  •   Andreas Dolk    15 年前

    首先,您不能对 具有 @Override . 此注释指示方法声明旨在重写超类中的方法声明。

    您不必注释重写方法 但是 如果使用此注释和注释方法 没有 重写超类方法,然后编译器将生成错误消息。

        2
  •  8
  •   Jeremy    15 年前

    指示方法声明旨在重写超类中的方法声明。如果使用此注释类型对方法进行了注释,但不重写超类方法,则需要编译器生成错误消息。

    http://download.oracle.com/javase/6/docs/api/java/lang/Override.html

    我想解释一下它的用法是在重写时 equals .

    这将出错,因为 等于 期望 Object 参数:

    public class Foo{
    
        @Override
        public boolean equals(Foo f){
            return true;
        }
    }
    
        3
  •  5
  •   Andrzej Doyle    15 年前

    最好的例子-重写 equals() .

    如果编写这样的类:

    public class Foo 
    {
        public String bar;
    
        public boolean equals(Foo other)
        {
            return this.bar.equals(other.bar);
        }
    }
    

    那么你已经 过载 equals方法,而不是重写 Object.equals 按计划进行。

    如果用 @Override 编译器将给出一个错误,说明(正确地)您没有重写超类方法。

    在Java 6中,你也可以使用它来实现接口方法——当你只为你的类添加一个方法来满足某个接口时,这是很方便的,因此编译器可以检查它是否需要并且提醒你改变接口。

    与所有注释一样,它实际上是一个编程注释,但是让编译器检查您的假设是否(仍然)正确在这些情况下非常方便。

        4
  •  2
  •   Nathan Hughes    15 年前

    这里表示您希望方法重写一个超类方法。当您错误地拼写方法名或给它提供错误的参数时,它确实会派上用场,这样它就不会覆盖您认为要覆盖的内容。

        5
  •  1
  •   Mikhail    15 年前

    这是一个传统的评论。有些编译器会确保后面跟着@override的函数实际上是一个override…只是一个故障保护