使用抽象 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 ...;}
}
我有三个 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 ...;}
}