[英]Override abstract method with different parameters?
我想定義一個抽象方法,以便在我的抽象類中已經使用此方法。 然后,我想在擴展我的抽象類的不同類中定義此抽象方法。
但是我該怎么辦呢?
(目標是為集成測試提供一些基本方法,這些方法都使用相同的“結構”,但實現一些不同的邏輯)。
如何在抽象類中定義帶有參數的抽象方法,如何在抽象類中使用該抽象方法,但是如何在測試實現中首先實現該方法?
public abstract class BaseIT {
protected doVerify(String params..) {
if (isValid()) {
//basic verification for all extending testcases
}
}
protected abstract boolean isValid(Object o);
}
public class TestA_IT extends BaseIT{
@Test
public void myTest {
//do some specific stuff and verify with resulting params
doVerify(params..);
}
protected boolean isValid(Object o) {
return o.isValid();
}
}
請記住,這只是我的問題的一個(愚蠢的)例子。 當然,我可以將isValid的結果傳遞給基類方法,但是在我的特定情況下,可能不是這樣。
問題是:對於不同的測試用例實現, Object o
是不同的對象。
我可能不會為此使用接口。 我怎樣才能做到這一點?
使isValid
方法接收一個BaseIT對象,並使您的TestA_IT
擴展BaseIT
。
您可以這樣做:
public class TestA_IT extends BaseIT {
@Test
public void myTest {
//do some specific stuff and verify with resulting params
doVerify(params..);
}
protected boolean isValid(Object o) {
return (o instanceOf YourObject) ? ((YourObject)o).isValid() : false;
}
}
一種更酷的方法是實現“訪客模式”,但我認為您會這樣的。
您可以定義一個Template method
,然后子類的實現將定義行為。
您可以將其轉換為:
((Class)o).isValid()
但是我認為更好的方法是使用isValid()
方法創建一個接口。 並使所有這些對象實現。
您的示例令人困惑,因為您顯示的兩個類沒有繼承關系。 在弄清楚這一點之前,您是否曾考慮過使isValid()
方法通用,和/或是否已采用類型為isValid()
方法的接口的對象?
無論如何,請遠離涉及強制轉換或instanceof
解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.