簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM