是否有一個用例,我們需要一個沒有定義方法的抽象類?我碰巧爲了泛型而創建了這樣一個抽象類,以便用戶只傳遞這個類的子類型。但我想知道是否有效或有更好的方法來做到這一點。沒有方法的抽象類
沒有方法的抽象類
回答
擁有一個沒有方法的抽象類是合法的,但完全沒有意義。您可以使用抽象類共享實現。如果一個類沒有方法,它沒有實現分享。
如果你需要有一些共同的變量(我假設你的抽象類至少有一些字段,否則它完全是空的),你將與成分和界面更好,就像這樣:
class CommonData {
// Some getters and setters for items that you wish to share
}
interface WithCommonData {
CommonData getCommonData();
}
您的類可以將常用數據作爲成員,並實現接口WithCommonData
,使您可以訪問常用數據,並讓這些類保持其繼承結構。
如果你需要「標記」一個用戶類,使用「標記接口」(即沒有方法的接口)來做這件事更加靈活,因爲用戶有能力建立自己的繼承鏈。
我不明白爲什麼組合比繼承共享變量更適合。你願意解釋一下嗎? – Joffrey
根據你的文章更新,我認爲IYO更好,因爲你可以自由地繼承其他東西,即使有這個共享數據,對吧?在這種情況下,IMO取決於類的語義。如果繼承層次對於由類表示的現實世界有意義,我會繼承。 – Joffrey
@Joffrey當你需要別人在他們的類中共享數據時,而不是建立自己的繼承層次結構會更好。當層次結構是你的時候,通過繼承進行共享更容易。當層次結構是某人elses'(我認爲是OP的情況,因爲他寫道「用戶將只傳遞子類型」),他們可能有自己的基類,他們從中繼承,所以它可能無法繼承類也是如此。 – dasblinkenlight
僅僅因爲其他類應該是這種類型而不需要創建一個抽象類。這可以通過使用接口來實現。 由於類只能擴展一個類,但實現任意數量的接口,因此使用接口作爲實例驗證程序不會限制繼承方面的解決方案。
例子:
public interface Vehicle {
// No methods, we just want several classes to be identified as of type Vehicle
}
public class Car implements Vehicle {
// is a vehicle
}
public class Motorcycle implements Vehicle {
// is a vehicle
}
public class Banana {
// is not a vehicle
}
public class Main {
public static void main(String[] args) {
Object o = new Car();
if(o instanceof Vehicle) {
// Ok
}
Object p = new Banana();
if(p instanceof Vehicle) {
// Will never get here
}
}
}
- 1. 抽象類沒有抽象方法
- 2. C#抽象類沒有任何抽象方法
- 3. 抽象類沒有任何抽象方法
- 4. php抽象類繼承錯誤,沒有抽象方法繼承
- 5. 具有抽象類參數的抽象方法的Java抽象類
- 6. 沒有抽象方法的實現
- 7. 抽象類非抽象方法調用
- 8. 抽象類和抽象方法
- 9. 調用抽象類的私有方法
- 10. 類中的抽象方法
- 11. 建議從抽象類中的方法調用抽象方法
- 12. 「不能實例化抽象類......與抽象方法」的類不應該有任何抽象方法
- 13. C#:抽象類中的抽象和非抽象方法?
- 14. 抽象方法沒有被拾起
- 15. 沒有錯誤,而實例化抽象類,雖然抽象方法未實現
- 16. 如果無法創建抽象類的新對象,抽象類中的非抽象方法有什麼意義?
- 17. 抽象類是否應該至少有一個抽象方法?
- 18. 抽象類/方法實現
- 19. 使用抽象類方法
- 20. 抽象類方法聲明
- 21. 抽象類和方法
- 22. 抽象類工廠方法
- 23. 抽象方法重寫抽象方法
- 24. 抽象類的方法覆蓋另一個抽象類
- 25. C++:用抽象方法創建抽象類並重寫子類中的方法
- 26. 抽象類與抽象字段和子類化沒有鑄造
- 27. 只有抽象方法
- 28. 在抽象類中調用非抽象類方法
- 29. 在抽象類中使用抽象類時如何實現抽象方法
- 30. 抽象方法
嘗試什麼?我知道我們可以做到這一點。我在問是否有用例 –
@KugathasanAbimaran:因爲可能存在隱藏的陷阱,這就是他在這裏問的原因。 – RichieHindle
聽起來像是我的一個接口.... –