使用抽象 class (Java) 中的重写方法

Using an overridden method from an abstract class (Java)

我有三个 class 类,一个超类、一个子类和一个测试 class。超类是抽象的,子类扩展了超类,测试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 {...}

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

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

在 class TesterClass 中你可以创建一个扩展抽象 SuperClass 的 class,然后你测试那个子 [=32] 的 toString =].因为,您没有覆盖那个子 class 的 toString,当您调用它的 toString 时,您实际上是在测试来自超级 class 的 toString, ( SuperClass)

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

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 ...;}
}