首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android Eclipse插件中super()调用的位置生成的代码可靠吗?

Android Eclipse插件中super()调用的位置生成的代码可靠吗?
EN

Stack Overflow用户
提问于 2011-02-15 01:05:43
回答 2查看 2.7K关注 0票数 16

在许多Android方法中,尤其是构造函数和被覆盖的方法中,您应该甚至必须使用()调用父类方法。当您使用Eclipse > Override/Implement ...时,您将从带有如下标记的模板中获得代码:

代码语言:javascript
复制
public MyCanvas(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}


@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub      
    super.onDraw(canvas);
} 

我不能确切地理解超类在每种情况下的作用,所以我总是在//TODO标记的确切位置插入代码。在本例中,我将在构造函数中的代码之前和onDraw()中的代码之后调用super()。

我可以在生成的代码中总是依赖这些代码插入位置吗?有没有一个简单的规则/解释什么时候调用super()?

EN

回答 2

Stack Overflow用户

发布于 2011-02-15 01:14:11

在生成的代码中,我可以始终依赖这些代码插入位置吗?

不,有时候你不想调用super.method。有时你想先调用它,有时在最后调用它,等等。这取决于。但是,我说的是方法,没有构造函数。

当调用

()时,有没有一个简单的规则/解释?

您将始终将所有的super作为前面的答题点。惟一不调用super的情况是当超类的构造函数没有参数时;在这种情况下,编译器将为您放置super。

TODO我不能确切地理解超类在每种情况下的作用,所以我总是在//

标记

的确切位置插入代码

如果你有疑问(我说的是超级方法),你可以随时看看源代码。Google Code Search是一个很好的资源。然后,您可以决定是将代码放在超级方法之前还是之后;或者甚至根本不放置超级方法。

请记住,不放置超方法在编译时是有效的。但是,android上的一些方法不会工作,除非您调用超级方法(例如,Activity类的onResume方法)。

此外,有时您将决定是否在运行时运行超方法。考虑这个经典的例子:

代码语言:javascript
复制
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if( KeyEvent.KEYCODE_BACK == event.getKeyCode() ){
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

如果用户按了back键,您将不会调用超方法。如果用户没有这样做,则将工作委托给超级方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4994959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档