2011-12-17 94 views
9

在java或Android中有@Override注释。这是什么意思?我发现它用于方法是从子类或继承的接口的方法,我想进一步知道和其他是@SuppressWarnings它也Anonation,如果是的Java多少使用的annonation和为此目的。为什么@Override需要在Java或Android?

+3

这是一个好问题,而是......琐碎的查找。 – 2011-12-17 15:08:38

回答

16

这个问题也回答了这里,而且相当简洁: Android @Override usage

这是一个注释,你可以用它来告诉你打算是有注释是一个覆盖的方法编译器和您的IDE超类方法。他们在出现错误时会有警告/错误,例如,如果您打算重写某个方法但拼写错误,如果注释位于IDE中,或者编译器会告诉您它实际上不覆盖超类方法,因此您可以确定原因并更正拼写错误。

这对于Android应用程序和活动来说更为重要,例如,所有调用都将基于活动生命周期 - 并且如果您没有正确覆盖生命周期方法,则它们永远不会被框架调用。一切都会很好地编译,但你的应用程序不会按照你的意图工作。如果添加注释,则会出现错误。

换句话说,如果添加@覆盖这可以帮助你做出确保你是真的覆盖现有的方法!相当有用。

+1

准确,强调的那样,注释实际上并不在运行时做任何事情,它是谁的阅读代码的帮助。如果签名与父项相同,该方法将被覆盖或不注释。 – stivlo 2011-12-17 15:09:32

+2

@stivlo:没有。如果设置了Override,并且该方法不会覆盖任何内容,则不会有任何运行时,因为它会阻止该类进行编译。这就是为什么注释是有用的:它告诉编译器开发人员的意图是重写一个方法。如果编译器检测到没有重写,它将拒绝编译。 – 2011-12-17 15:33:10

+0

注释是否有用于防止重复的方法相同? – 2013-05-27 10:02:42

9

覆盖意味着您正在更改从父类继承的方法的行为,而不更改签名。 @Override注释用于标记此。它与多态的概念紧密相关。例如:

public class A { 
    public void foo() { 
     System.out.println("A"); 
    } 
} 

public class B extends A { 

    @Override 
    public void foo() { // I want to change the way foo behaves 
     System.out.println("B"); // I want to print B instead of A 
    } 
} 

public static void main(String[] args) { 
    A a = new A(); 
    a.foo(); // prints A 

    A b = new B(); // I can use type B because it extends A 
    b.foo(); // I have overriden foo so it prints B now 
} 
+0

行为意味着我不能改变参数和返回类型 – 2011-12-17 15:00:03

+0

@Mayur Patel:是的,只有方法内的代码。 – Tudor 2011-12-17 15:01:27

+0

Thnx这么多的规格 – 2011-12-17 15:03:11

4

只是为了确保您实际上在编译时覆盖它,并提高可读性

例如

class Animal{ 
    public void eat(Food food){ 
    } 
} 

class Person extends Animal { 
    @Override 
    public void eat(String food){ 
    } 

} 

这会给你编译因为你不是实际上覆盖它(参见食物的类型)

+0

我们可以覆盖当前类方法? – 2011-12-17 15:00:35

+0

给我一个例子你是什么意思的当前类方法 – 2011-12-17 15:01:56

+0

我知道,但我删除它什么是prblm?其跌幅可读性 – 2011-12-17 15:04:05

0

@override其注释,即元数据在jdk 1.6中引入。如果你在override方法之前不写它,它不会有什么区别,但它只是用来增加编译器的可读性。

+0

1.5中引入了包含'@ Override'的注解。目的是确保你实际上覆盖了你认为自己的东西,而不是“增加编译器的可读性”。 – 2011-12-17 15:07:45

0

标记您确实实施或更改方法。就像在编译时检查一样。例如,如果您要实施@Override public void equals(final Car pObject);而不是@Override public void equals(final Object pObject);,则会出现错误。

0

这听起来像你的问题是关于一般注释更多,所以我会回答。注释提供有关正在注释的项目的额外元数据。这允许其他代码使用该信息来决定如何运行。 More detailed description。语言中有大量的内容,但你可以自己写。你给

两个例子告诉它编译代码编译器的额外信息。当它看到@Override时,它会检查以确保该方法实际上覆盖了一个方法。当它看到@SuppressWarnings时,它知道它应该忽略代码块中存在的给定类型的编译器警告。

他们可以在户外使用的编译器为好。有许多库可以注释一个类对象,并使用该元数据构建数据库或解析xml文件。