在没有 super 关键字的情况下调用 super java
Call super without super keyword java
我正在开发 Android 应用程序,我应该以某种方式调用 "super" 而方法内部没有 super 关键字。我可以用 class 的实例调用 super 吗?例如:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
如何在不使用 super 的情况下调用 super.onCreate(savedInstanceState)关键词?
更新 1
我试过了,但这也不起作用。
@Override
public void onCreate(Bundle savedInstanceState) {
try {
getClass().getSuperclass().getMethod("onCreate",Bundle.class).invoke(this,savedInstanceState);
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
注意:请理解我在说什么。不要说 'call super()'。
不调用 super
方法通常是一个 非常糟糕的 想法,尤其是涉及到 activity 生命周期时。事实上,如果不调用 activity 生活方式事件的 super
方法,activity 将不会失败。
通过在方法上使用 @Override
,您正在修改其功能以执行您需要的任务,即声明视图。但是,父级 class 可能需要做其他重要的事情,这些事情与应用程序级开发人员无关,即设置状态或标志。如果一个方法被设计为完全由应用程序级开发人员实现而不执行任何父代码,则它将被声明为 abstract
或 interface
的一部分。
延伸阅读:
- super() in Java
- super class android life cycle
public class A {
static void m1() {
System.out.println("m1 P");
}
}
class B extends A {
static void m1() {
System.out.println("m1 C");
}
}
class Test {
public static void main(String[] args) {
A a = new B();
A.m1();
}
}
我正在开发 Android 应用程序,我应该以某种方式调用 "super" 而方法内部没有 super 关键字。我可以用 class 的实例调用 super 吗?例如:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
如何在不使用 super 的情况下调用 super.onCreate(savedInstanceState)关键词?
更新 1 我试过了,但这也不起作用。
@Override
public void onCreate(Bundle savedInstanceState) {
try {
getClass().getSuperclass().getMethod("onCreate",Bundle.class).invoke(this,savedInstanceState);
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
注意:请理解我在说什么。不要说 'call super()'。
不调用 super
方法通常是一个 非常糟糕的 想法,尤其是涉及到 activity 生命周期时。事实上,如果不调用 activity 生活方式事件的 super
方法,activity 将不会失败。
通过在方法上使用 @Override
,您正在修改其功能以执行您需要的任务,即声明视图。但是,父级 class 可能需要做其他重要的事情,这些事情与应用程序级开发人员无关,即设置状态或标志。如果一个方法被设计为完全由应用程序级开发人员实现而不执行任何父代码,则它将被声明为 abstract
或 interface
的一部分。
延伸阅读:
- super() in Java
- super class android life cycle
public class A {
static void m1() {
System.out.println("m1 P");
}
}
class B extends A {
static void m1() {
System.out.println("m1 C");
}
}
class Test {
public static void main(String[] args) {
A a = new B();
A.m1();
}
}