java - 有没有办法在不修改方法的情况下从java中的子类对象调用父类方法

标签 java oop inheritance

我有一个父类和一个子类,它们都有一个具有相同签名(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/

相关文章:

java - 数据库查询以获取范围内的记录

c++ - 使用另一个类中的成员初始值设定项声明一个类的实例

php - PHP 中的单例 v 单实例数据库连接

c# - 内部抽象类 : how to hide usage outside assembly?

java - java中类的继承

java - 不断产生网络流量的应用程序代码

java - 这个 Maven 插件真的有一个无效的描述符吗?

python - 字典的子类化; dict.update 返回不正确的值 - python bug?

java - 为什么 JavaFX 应用程序和场景构建器显示乱码?

java - 逻辑看不懂