在许多Android方法中,尤其是构造函数和被覆盖的方法中,您应该甚至必须使用()调用父类方法。当您使用Eclipse > Override/Implement ...时,您将从带有如下标记的模板中获得代码:
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()?
发布于 2011-02-15 01:14:11
在生成的代码中,我可以始终依赖这些代码插入位置吗?
不,有时候你不想调用super.method
。有时你想先调用它,有时在最后调用它,等等。这取决于。但是,我说的是方法,没有构造函数。
当调用
()时,有没有一个简单的规则/解释?
您将始终将所有的super
作为前面的答题点。惟一不调用super
的情况是当超类的构造函数没有参数时;在这种情况下,编译器将为您放置super。
TODO我不能确切地理解超类在每种情况下的作用,所以我总是在//
标记
的确切位置插入代码
如果你有疑问(我说的是超级方法),你可以随时看看源代码。Google Code Search是一个很好的资源。然后,您可以决定是将代码放在超级方法之前还是之后;或者甚至根本不放置超级方法。
请记住,不放置超方法在编译时是有效的。但是,android上的一些方法不会工作,除非您调用超级方法(例如,Activity
类的onResume
方法)。
此外,有时您将决定是否在运行时运行超方法。考虑这个经典的例子:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if( KeyEvent.KEYCODE_BACK == event.getKeyCode() ){
return true;
}
return super.onKeyUp(keyCode, event);
}
如果用户按了back键,您将不会调用超方法。如果用户没有这样做,则将工作委托给超级方法。
发布于 2011-02-15 01:10:28
https://stackoverflow.com/questions/4994959
复制相似问题