(新手到Java,旧时代的C#家伙。)
我注意到Android示例代码中有很多@Override
的使用。我认为所有Java方法都默认为“虚拟”?
@Override
做了什么?
示例:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
答案 0 :(得分:99)
这是一个注释,您可以使用它来告诉编译器和IDE您希望该注释的方法是超类方法的覆盖。如果您犯了错误,他们会有警告/错误,例如,如果您打算覆盖方法但拼错它,如果注释在那里IDE或编译器会告诉您实际上不覆盖超类方法,因此您可以确定原因并纠正拼写错误。
这对Android应用程序和活动来说更为重要,例如,所有调用都将基于活动生命周期 - 如果您没有正确覆盖生命周期方法,它们将永远不会被框架调用。一切都会正常编译,但你的应用程序将无法按照你想要的方式工作。如果添加注释,则会出错。
答案 1 :(得分:49)
此代码适合初学者,他们真正想了解@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);
}
}
答案 2 :(得分:23)
Override-Annotation只是您想要覆盖某个函数的编译器的提示。然后,如果函数存在,编译器将检查父类和接口。如果没有,您将收到编译错误。
它基本上只是一种安全机制。
作为参考,请参阅this article(覆盖在中间某处解释)
答案 3 :(得分:0)
Override主要用于定义方法.Overriding类似于其含义。
我将尝试以非常蹩脚的方式解释。如果您已经定义了Oncreate()方法并且具有与之关联的属性,则进行假设。再次当您在代码中为某个对象调用Oncreate()方法时,您现在编写的代码将覆盖您的应用程序的正式定义的属性或Oncreate()的继承属性。