簡體   English   中英

覆蓋具有不同參數的抽象方法?

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

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