有没有办法从java中的子类对象调用父类方法而不修改方法

kav*_*mre 5 java oop inheritance

我有父类和子类,都有一个方法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();

        }
}
Run Code Online (Sandbox Code Playgroud)

我想调用父类m1方法.我知道我可以在子类方法中使用super来调用它的父方法.但是我无权更改子类的源代码.我必须从子类对象中调用它.请任何人帮忙!!! 是不是可能在java?

Cha*_*ens 7

在创建Object时,您使用的是Super类的引用,但您的对象是子类,因此在调用m1()方法时,将调用覆盖的方法.如果你想调用超类的方法,那么object应该是Super类.作为:

Parent parent=new Parent();
parent.m1();
Run Code Online (Sandbox Code Playgroud)

要么

您可以从子类调用超类m1()方法.

@Override
public void m1() {
    super.m1();
    System.out.println("Child method");
      }
Run Code Online (Sandbox Code Playgroud)

要不然

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[]{}                  ) ;

}
}
Run Code Online (Sandbox Code Playgroud)