我有三个类,一个父类(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/