2011-07-31 97 views
6

当我们在子类中覆盖的方法,我们调用父类的方法,这种方法中,例如:Android的方法覆盖

protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    width = w ; 
    height = h ; 

    Log.d(TAG, "onSizeChanged: width " + width + ", height "+ height); 

    super.onSizeChanged(w, h, oldw, oldh); 
} 

那么,为什么我们需要调用super.onSizeChanged()

我删除行super.onSizeChanged(),结果与它相同。我们称之为super.onCreate()

回答

1

有一些方法可以做基本的事情,比如onCreate和onPause活动方法。如果您在不调用超级方法的情况下覆盖它们,那些事情就不会发生,并且活动将不会按照它应该的那样运行。在其他情况下(通常当你实现一个接口的时候)没有你重写的实现,只有声明,因此不需要调用super方法。

还有一件事,有时你重写一个方法,你的目的是改变原始方法的行为,而不是扩展它。在这些情况下,您不应该调用超级方法。一个例子是摆动组件的绘制方法。

1

对于某些方法,您必须调用超级方法来初始化某个对象或变量(否则您会得到一个supernotcall异常),对于其他您可以称之为但您确实注意到的异常。

+0

有人可以解释更多的深度?) –

2

在面向对象编程中,用户可以在子类中继承超类的属性和行为。一个子类可以重写它的超类的方法,用它自己的方法实现超类的实现。

有时候压倒一切的方法将完全在超替换相应的功能,而在其他情况下,父类的方法仍然必须从上位法调用。因此,大多数编程语言都要求重写方法必须显式调用超类的重写方法才能执行它。

0

有很多的东西,Android的API将在OnCreate(或任何其他ON_ _ ___)你Activity类的方法做。

现在,当你覆盖的方法,您的实现将运行活动,同时,因为这就是压倒一切的是为使用而不是一个在活动课。它覆盖父级(即Activity类)实现,并将其替换为子级实现(即Your class)。

因此Android强制执行这个规则,你总是需要除了父母的实现中调用自己的实现,使母公司的实施(其中包含许多重要的事情)保持,除了您的实现完好无损。

我希望这是足够精细,使清晰。