java - 使用抽象类中的重写方法 (Java)

标签 java oop inheritance reflection abstract-class

我有三个类,一个父类(super class)、一个子类和一个测试类。父类(super class)是抽象的,子类扩展了父类(super class),测试类与它们都没有关系。 所以

public abstract class SuperClass {...}
public class SubClass extends SuperClass {...}
public class TesterClass {...}

SuperClass和SubClass都有一个toString()方法,所以看起来更像

public abstract class SuperClass {
    public String toString(){...};
    ...
}
public class SubClass extends SuperClass {
    public String toString(){...};
    ...
}
public class TesterClass {...}

我需要做的是在测试器类中使用父类(super class)的 toString() 方法。我试过从子类到父类(super class)的强制转换和对象,并使用那里的方法,但它最终使用了子类的 toString() 方法。 (在我尝试使用一点反射来查看 Java 认为该对象是哪个类之后,它看起来即使在转换之后仍然认为它仍然是子类)。我考虑过尝试使用反射直接从 SuperClass 获取我想要的方法,然后使用 invoke() 调用对象,但这似乎是一个非常困惑的解决方案。

任何帮助都将是一个很大的帮助,即使它只是向我指出一个我还没有听说过的概念。谢谢!

最佳答案

TesterClass 类中,您可以创建一个扩展抽象 SuperClass 的类,然后测试该子类的 toString。因为,您没有覆盖该子类的 toString,当您调用它的 toString 时,您实际上是在测试父类(super class)的 toString, (即,父类(super class))

或者,您可以在您的测试方法中 1) 创建一个 SuperClass 类型的内部匿名类; 2) 实现它的抽象方法(只是忽略它们,因为它们不会被测试)。 3)测试内部匿名类的toString:

public class TesterClass {

     void test_super_class_to_String(){
          SuperClass myApp = new SuperClass() {
                @Override
                void do_something() {}
            };
       String str = myApp.toString();
       // assert str == ....
    }
}

对于如下所示的 SuperClass

public abstract class SuperClass {
    abstract void do_something();

    public String toString(){  return ...;}
}

关于java - 使用抽象类中的重写方法 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65085941/

相关文章:

java - Java中的接口(interface)是什么?

java - Eclipse Java EE 新 Maven 项目 : Could not resolve archetype

java - 从 SonarQube 4.1.1 分析中排除 Java 测试文件

java - RadioGroup 中 RadioButton 的 SharedPreferences.

oop - 深度与平面对象模型

php - 从数据库填充下拉列表

perl - 使用 `bless` 创建具有继承的对象

c++ - 覆盖未调用的虚拟方法

c# - 如果转换为对象类,则知道原始类

java - 请求作用域的 bean 和数据模型初始化?