Android @Override使用情况

(新手到Java,旧时间C#的家伙。)

在Android示例代码中,我注意到了很多@Override的使用。 我以为所有的Java方法默认为“虚拟”?

@Override做了什么?

例:

 private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } 

这是一个注释,您可以使用它来告诉编译器和您的IDE,您打算将具有该注释的方法视为超类方法的重写。 他们有警告/错误,如果你犯错误,例如,如果你打算重写一个方法,但拼写错误,如果注释是在那里的IDE或编译器会告诉你,它实际上并没有重写超类方法,因此您可以确定原因并更正拼写错误。

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

这个代码对于那些真正想了解@Override过程的初学者来说,这会帮助你! (提醒Java的inheritance概念。)

例如, Fish类可能有两个子类: FreshwaterFishSaltwaterFish

这些子类将具有Fish类的所有function,但可以通过新的属性和行为或父类Fish修改的行为进一步自定义对象。 例如, FreshwaterFish类可能包括有关淡水环境types(例如河stream,湖泊,池塘或水坑)的信息。

类似地, 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-Annotation只是编译器的一个提示,要覆盖某个函数。 如果函数存在那么编译器会检查父类和接口。 如果没有,你会得到一个编译错误。

它基本上只是一个安全机制。

作为参考,请参阅这篇文章 (覆盖解释在中间的某个地方)

Override主要用于定义方法的情况.Overriding与其意义相似。

我将尝试以非常蹩脚的方式解释。假设你已经定义了Oncreate()方法,并且具有相关的属性,请假设它。 再次,当您在代码中调用某个对象的Oncreate()方法时,您现在编写的代码将为您的应用程序重写Oncreate()的正式定义的属性或inheritance属性。