[英]Accessing private variables from a super class using an overridden abstract method
[英]Using an overridden method from an abstract class (Java)
我有三個類,一個超類、一個子類和一個測試 class。 SuperClass 是抽象的,SubClass 是 SuperClass 的擴展,測試 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 {...}
我需要做的是在測試儀 class 中使用 SuperClass 的 toString() 方法。 我已經嘗試將子類和 object 從子類轉換為超類並使用那里的方法,但最終使用子類中的 toString() 方法。 (在我嘗試使用一點反射來查看 class Java 認為 object 是什么之后,它看起來就像它認為它仍然是子類,即使在鑄造之后)。 我曾考慮過嘗試使用反射直接從 SuperClass 獲取我想要的方法,然后使用 invoke() 調用 object,但這似乎是一個非常混亂的解決方案。
任何幫助都將是一個很大的幫助,即使它只是將我指向一個我還沒有聽說過的概念。 謝謝!
在 class TesterClass
,您可以創建一個擴展抽象SuperClass
的 class ,然后測試該子類的toString
。 因為,您沒有覆蓋該子類的toString
,所以當您調用它的toString
時,您實際上將測試來自超級 class 的toString
,(即SuperClass
)
或者,您可以在您的測試方法中 1) 創建一個 SuperClass 類型的內部匿名SuperClass
; 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 ...;}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.