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
类可能有两个子类: FreshwaterFish
和SaltwaterFish
。
这些子类将具有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属性。