当我们覆盖子类中的方法时,我们在此方法中调用超类方法,例如:
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()
,结果与之相同。
或者在onCreate方法中,我们称之为super.onCreate()
。
答案 0 :(得分:2)
在面向对象的编程中,用户可以继承子类中超类的属性和行为。子类可以覆盖其超类的方法,将其自己的方法实现替换为超类的实现。
有时重写方法将完全替换超类中的相应功能,而在其他情况下,仍必须从重写方法调用超类的方法。因此,大多数编程语言都要求重写方法必须在超类上显式调用重写方法才能执行它。
答案 1 :(得分:1)
对于某些方法,你必须调用super方法来初始化一些对象或变量(否则你得到一个超级调用异常),对于其他你可以调用它但你注意到的方法。
答案 2 :(得分:1)
某些方法可以执行基本操作,例如onCreate和onPause活动方法。如果你在不调用超级方法的情况下覆盖它们,那些事情就不会发生,并且活动不会发挥作用。在其他情况下(通常在实现接口时),没有覆盖的实现,只有声明,因此不需要调用super方法。
还有一件事,有时你会覆盖一个方法,你的目的是改变原始方法的行为,而不是扩展它。在这些情况下,您不应该调用super方法。一个例子是摆动组件的绘制方法。
答案 3 :(得分:0)
Android的API会在您的Activity类的onCreate(或任何其他on_ _ ___ )方法中执行很多操作。
现在,当您重写该方法时,在运行活动时将使用您的实现而不是活动类中的实现,因为这就是覆盖的意图。它覆盖了父类(即Activity类)的实现,并将其替换为子类的实现(即你的类)。
因此Android强制执行此规则,除了您自己的实现之外,您总是需要调用父实现,以便除了您的实现之外,父实现(包含许多重要的事情)保持不变。
我希望这个内容足够精细,并且很清楚。