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

mu0hgdu0  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(437)

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

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

超类和子类都有一个tostring()方法,所以看起来更像

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

我需要做的是在tester类中使用超类的tostring()方法。我曾经尝试过将对象从子类强制转换为超类,并在那里使用方法,但最终使用了子类的tostring()方法(在我尝试使用一点反射来查看java认为对象是什么类之后,看起来它仍然认为它是子类(即使在强制转换之后)。我曾考虑过尝试使用反射直接从超类中获取所需的方法,然后使用invoke()调用对象,但这似乎是一个非常混乱的解决方案。
任何帮助都是很大的帮助,哪怕只是给我指出一个我还没听说过的概念。谢谢您!

polkgigr

polkgigr1#

在班级内 TesterClass 您可以创建一个扩展抽象的类 SuperClass ,然后进行测试 toString 属于那个亚类。因为,你没有覆盖 toString 当你称它为 toString 您将实际测试 toString 来自超级阶级。, SuperClass )
或者,您可以在测试方法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 ...;}
}

相关问题