@Override annotation in Android



我是Java和Android编程新手。我遇到的问题是,在浏览了几本书,论坛和网站之后,我对@override注释的作用没有清楚的了解。我理解它表示方法被重载。但是为什么android需要它呢?我很少在java的源代码中看到它,但在android中却经常看到。

你可能很少在旧的 Java源代码中看到它,因为它是一个相当新的创新-而Android代码从定义上来说更近。

这是一个安全网,真的-它告诉编译器你试图重写一些东西-所以如果方法没有重写任何东西,请失败,例如由于名称中的拼写错误。这就像override是一个关键字,它是c#中方法声明的一部分。它帮助你明确你在做什么,这有助于防止错误,也使你的代码对未来的读者更清晰。

如果你了解@Override注释的基本原理,它只是满足两个目的的元数据信息:

  • 描述该方法被重写,因为它是在接口或扩展类中定义的

  • 帮助你正确识别哪些方法是局部声明的,哪些是覆盖的,因为在android中你可能会从Fragment, Activity, Services, BroadcastReceiver等扩展,这是一个很好的做法,将使你的代码更干净。

至于问题,你没有看到它在Java风格,这不仅是因为它是一个相当新的功能(不是新的自2005年以来),但因为你不覆盖方法,至少在Java中不是在Swing或SWT,最常见的是,你会发现他们在TableModel或当它的Servlet扩展HttpServlet类

@Override意味着你想在子类中重新定义超类中的函数。阅读更多关于抽象方法、类、多态性的内容

因为您覆盖了很多方法,例如;当您创建Activity(它扩展了Activity)时,您需要覆盖onCreate( Bundle savedInstanceState)方法来初始化Activity,等等,每次您覆盖来自母类的方法时,eclipse都会添加注释 @override

我对android编程几乎一无所知,但是@Override-annotation用于显示该方法覆盖超类方法(或者在Java 1.6中实现接口方法)。除了注释的纯文档意义之外,如果方法实际上没有覆盖任何超类方法,那么至少Eclipse还会在您认为它覆盖了任何超类方法时发出警告(或者将其标记为错误,这取决于您的设置)(从而避免了一些令人沮丧的bug搜索)。也许android编译器只是默认要求所有重写方法都用@Override注释。

java和android都不需要。你经常在android程序中看到它,因为当你创建一个新的活动、方法等时,eclipse会自动添加它。如果你删除@Override注释,什么也不会发生。

@overide有点像c++中的虚拟方法,android中的Oncreate方法更像是wxWidget中的虚拟bool Oninit(),这个方法被android (Oncreate)用来构建你的GUI,所以因为GUI不同于在Oncreate中编写代码的人,这就是为什么我们必须@overide它。我们@覆盖库中使用的任何我们想要自定义的方法。oncreate()和Oninit()都是我们想要自定义的方法

out_marginLeft="50dp"
            android:layout_marginTop="50dp"
            android:layout_marginRight="50dp"
            android:gravity="center"
            android:orientation="vertical">
            <ProgressBar
                android:id="@+id/progressBar"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_above="@+id/txtProgress"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:progress="50"
                android:progressTint="@android:color/black" />
            <TextView
                android:id="@+id/txtProgress"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:text="Progress"
                android:textColor="@android:color/black" />
        </LinearLayout>  
Java

@override意味着您从可用的类中借用方法,而不是由程序员定义的。

最新更新