gpt4 book ai didi

java - 为什么在覆盖现有方法时调用父类(super class)方法?

转载 作者:行者123 更新时间:2023-11-29 09:33:45 26 4
gpt4 key购买 nike

总的来说,我是 JAVA 和 OOP 的新手。在这个非常简单的代码中,为什么我必须从父类(super class)调用 onCreate 方法?它不是从父类(super class)继承的吗?我知道构造函数方法不会继承到子类,如果你想调用构造函数,你必须调用父类(super class)。 super.onCreate 是构造函数调用吗?构造函数名称是否必须与类名称相同?我知道这是一个愚蠢的问题,感谢您的回复。

import android.app.Activity;

public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

最佳答案

why I have to call the onCreate method from the superclass? isn't it inherited from the superclass?

实现是继承的,但您要覆盖它。您需要表明您不只是想替换原始行为 - 您想要从父类(super class)然后执行该行为额外代码。

这不是构造函数调用 - 除非您显式调用父类(super class)实现,否则它的代码将不会被执行。同样与构造函数不同的是,父类(super class)实现调用不必是方法的第一条语句。您可以随时随地调用父类(super class)实现,甚至多次。

这是一个简短但完整的示例程序,展示了调用 super 方法与不调用 super 方法之间的区别:

class Super {
void method1() {
System.out.println("Super.method1");
}

void method2() {
System.out.println("Super.method2");
}
}

class Sub extends Super {
@Override void method1() {
// No explicit super call
System.out.println("Sub.method1");
}

@Override void method2() {
super.method2();
System.out.println("Sub.method2");
}
}

public class Test {
public static void main (String[] args) {
Super x = new Sub();
x.method1(); // Prints just Sub.method1
x.method2(); // Prints Super.method2 and Sub.method2
}
}

(Sub.method1 顺便调用super.method2() 是完全可行的。你可以调用任何 来自子类的方法。)

关于java - 为什么在覆盖现有方法时调用父类(super class)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com