本问题已经有最佳答案,请猛点这里访问。
(新手到Java,旧时代的C#家伙。)
我注意到在Android示例代码中使用了很多@Override。 我认为所有Java方法都默认为"虚拟"?
然后@Override做什么?
例:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
作为旁注,Override不是Android特定的,而是Java 5及更新版本中存在的注释:java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html
整个问题/线程帮助我理解了@override的工作原理。 好问题,好答案。 谢谢大家。
这是一个注释,您可以使用它来告诉编译器和IDE您希望该注释的方法是超类方法的重写。如果您犯了错误,它们会有警告/错误,例如,如果您打算覆盖方法但拼错它,如果注释在那里,IDE或编译器会告诉您实际上它不会覆盖超类方法因此你可以确定原因并纠正拼写错误。
这对Android应用程序和活动来说更为重要,例如,所有调用都将基于活动生命周期 - 如果您没有正确覆盖生命周期方法,它们将永远不会被框架调用。一切都会正常编译,但你的应用程序将无法按照你想要的方式工作。如果添加注释,则会出现错误。
它不仅适用于IDE。 如果@Override一个不在超类中的方法,Java编译器将产生错误。
@Romain Guy:吹捧一个既成事实!
每当出现错误时 - >添加@override。 这就是答案所说的-_-
这段代码对于初学者谁真的想了解@Override进程,这将对你有所帮助! (提醒Java的继承概念。)
例如,Fish类可能有两个子类:FreshwaterFish和SaltwaterFish。
这些子类具有Fish类的所有功能,但可以通过父类Fish中的新属性和行为或修改的行为进一步自定义对象。例如,FreshwaterFish类可能包括有关生活在淡水环境中的类型的信息(例如河流,湖泊,池塘或水坑)。
类似地,SaltwaterFish类可以自定义makeBabyFish()方法,使得鱼在繁殖后(如超类中所定义)通过使用覆盖机制来吃它的配偶,如下所示:
public class SaltwaterFish extends Fish
{
@Override
public void makeBabyFish(Fish fishSpouse, int numBabies) {
// call parent method
super.makeBabyFish(fishSpouse, numBabies);
// eat mate
eat(fishSpouse);
}
}
非常好解释..谢谢
所以基本上你使用override来"删除"并从超类中重写一个函数。 得到它了。
为什么在调用eat方法之前没有添加类名?
如果没有"@Override"注释会怎么样? 一些错误?
有史以来最好的解释
这应该是公认的答案
Override-Annotation只是您想要覆盖某个函数的编译器的提示。然后,如果函数存在,编译器将检查父类和接口。如果没有,您将收到编译错误。
它基本上只是一种安全机制。
供参考,请参阅本文(覆盖在中间某处解释)
那条链接现在已经死了
存档版本
感谢您更新的链接。 我更新了我的答案。
覆盖主要用于定义方法。覆盖类似于其含义。
我将尝试以非常蹩脚的方式解释。假设您已经定义了Oncreate()方法并且具有与之关联的属性。再次当您在代码中为某个对象调用Oncreate()方法时,您现在编写的代码将覆盖您的应用程序的正式定义的属性或Oncreate()的继承属性。