1
9
这是
所以,我猜ADT Eclipse插件是自动添加该调用的
|
2
164
这将添加到支持注释库中:
http://tools.android.com/tech-docs/support-annotations @Callsuper公司 |
3
77
如果你想的话 力 子类要执行父类的逻辑,公共模式如下所示:
实际上,这并不能回答您的问题,即是什么促使Eclipse自动将超类调用插入到实现中;但是,我认为这并不是解决问题的方法,因为它总是可以被删除的。
实际上,你不能强制一个方法必须用Java关键字或类似的方法调用超类版本。我怀疑您的异常仅仅来自父类中的一些代码,检查期望的不变量,或者其他一些被您的方法无效的东西。注意,这与引发异常有细微的不同。
因为
你打电话失败
|
4
8
如果您希望确保绝对地也调用了超类方法,那么您必须有一点技巧:不允许覆盖超类方法,但是让它调用可重写的受保护方法。
这样,用户必须调用super.foo()或base.foo(),并且在声明为final时,它始终是基类版本。特定于实现的东西在impl_-stuff()中,它可以被重写。 |
5
8
要回答实际问题,自动创建对super.oncreate()的调用是ADT插件的一个特性。 在爪哇中,不能直接强制子类调用方法的超级实现,AFAIK(参见围绕其他工作所描述的模式)。但是,请记住,在Android中,您不是直接实例化活动对象(或服务对象)-您将意图传递给系统,系统实例化该对象并对其调用onCreate()(以及其他生命周期方法)。因此,系统有一个对活动实例的直接对象引用,并且能够(大概)检查在onCreate()的超类实现中设置为true的一些布尔值。 虽然我不知道它是如何实现的,但它可能看起来像这样:
在接收意图并从中实例化活动对象的“系统”级类中:
我想可能比那要复杂一点,但你明白了。Eclipse自动创建调用,因为ADT插件告诉它,这是一种方便。编码愉快! |
6
4
Java中没有任何东西可以调用超级,而且当你不想调用时,有很多例子。唯一可以强制调用super的地方是构造函数。所有构造函数都必须调用超类构造函数。如果不显式编写,将插入一个(无参数构造函数),如果没有参数构造函数,则必须显式调用它。 |
7
3
Eclipse只是提供帮助,提醒您可以根据需要调用超类实现。 您可能会得到一个错误,因为您没有做超类所做的必要的事情,因为您没有调用它的实现。 |
8
1
Eclipse只会帮助您正确地做事情并避免出现异常。 从 http://developer.android.com/reference/android/app/Activity.html#onCreate(android.os.Bundle )
|