我有一个父类和一个子类,它们都有一个具有相同签名(Override)的方法 m1,我可以在以下场景中调用父类方法吗?我不想更改子类方法。
// Super class
public class Parent
{
public void m1()
{
System.out.println("Parent method");
}
}
// Sub class
public class Child extends Parent {
@Override
public void m1() {
System.out.println("Child method");
}
}
// User class
public class Kavi {
public static void main(String[] args) {
Parent p = new Child();
p.m1();
}
}
我想调用父类 m1 方法。我知道我可以在子类方法中使用 super 来调用它的父方法。但我无权更改子类的源代码。我必须从子类对象中调用它。请任何人帮助!在 Java 中有可能吗??
最佳答案
在创建对象时,您正在使用父类(super class)的引用,但您的对象属于子类,因此在调用 m1() 方法时,将调用覆盖的方法。如果要调用父类(super class)的方法,则对象应该属于父类(super class)。作为:
Parent parent=new Parent();
parent.m1();
或
您可以从子类调用父类(super class) m1() 方法。
@Override
public void m1() {
super.m1();
System.out.println("Child method");
}
否则
import java.lang.reflect.*;
class A {
public void method() {
System.out.println("In a");
}
}
class B extends A {
@Override
public void method() {
System.out.println("In b");
}
}
class M {
public static void main( String ... args ) throws Exception {
A b = new B();
b.method();
b.getClass()
.getSuperclass()
.getMethod("method", new Class[]{} )
.invoke( b.getClass().getSuperclass().newInstance() ,new Object[]{} ) ;
}
}
关于java - 有没有办法在不修改方法的情况下从java中的子类对象调用父类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068210/