Android @Override用法

时间:2010-06-01 13:21:46

标签: java 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;
    }
}

4 个答案:

答案 0 :(得分:99)

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

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

答案 1 :(得分:49)

此代码适合初学者,他们真正想了解@Override进程,这对您有所帮助! (提醒Java的继承概念。)

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

这些子类具有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()的继承属性。