Java Android@Override用法

Java Android@Override用法,java,android,overriding,Java,Android,Overriding,(Java新手,老C#guy) 我注意到在Android示例代码中大量使用了@Override。我以为所有Java方法默认都是“虚拟的” 那么@Override做什么呢 例如: private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.load

(Java新手,老C#guy)

我注意到在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的继承概念。)

例如,
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);  
    }  
}

重写主要用于定义方法的情况。重写与方法的含义类似


我将尝试用一种非常蹩脚的方式来解释。假设您已经定义了Oncreate()方法,并且具有与之相关联的属性。同样,当您在代码中为某个对象调用Oncreate()方法时,您现在编写的代码。。。将覆盖应用程序的Oncreate()的正式定义属性或继承属性。

作为旁注,
override
不是特定于Android的,而是Java 5和更新版本中存在的一个注释:整个问题/线程帮助我了解了
@override
的工作原理。好问题,好答案。谢谢各位,这不仅仅是为了IDE。如果@Override一个不在超类中的方法,Java编译器将产生一个错误。这就是答案所说的-u-链接现在已经死了,谢谢更新的链接。我更新了我的答案。解释得很好。。感谢您基本上使用覆盖来“取消继承权”,并从超类重新编写函数。明白了。为什么在调用eat方法之前没有添加类名?如果没有“@Override”注释,会发生什么?一些错误?最好的解释