亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在接口中添加新方法時如何擺脫覆蓋所有類

在接口中添加新方法時如何擺脫覆蓋所有類

子衿沉夜 2023-05-17 14:45:41
我有接口、抽象方法和更多分類并使用這些引用類型如下。   public interface InterfaceA {    boolean mehod1();    boolean method2();    boolean newMethod(); //When added new method      }public abstract class AbstractA implements InterfaceA{// other common method}public Class C extend AbstractA //have to override three methodpublic Class D extend AbstractA //have to override three methodpublic Class E extend AbstractA //have to override three method but only should be override old methodpublic Class F extend AbstractA  //have to override three method  but only should be override old method這些類派生了 AbstractA 類,我只想在接口中使用新方法,但只實現 C 和 D 類,其他應該只使用舊方法。應該如何設計?
查看完整描述

3 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

您可以通過兩種方式處理它:

  1. 如果您使用的是 Java 7 或更低版本,請擴展 InterfaceA 以創建新接口

????public?InterfaceB?extends?InterfaceA{?
???????//?Your?new?methods?definitions?here..
????}

讓 C 類和 D 類實現 InterfaceB。

  1. 如果您使用的是 Java 8 或更高版本,可以將默認方法添加到 InterfaceA。覆蓋默認實現以在類 C 和 D 中提供您的自定義實現


查看完整回答
反對 回復 2023-05-17
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

您應該考慮 SOLID 規則之一—— I“接口隔離原則”。您可能需要創建一個新接口,并且您的 C 類和 D 類可以實現多個接口。這是更好的設計方法。



查看完整回答
反對 回復 2023-05-17
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

看起來您沒有使用繼承。
如果 C、D、E、F 是 A/AbstractA 的子類,那么 A 中定義的任何方法都應該對所有這些子類都有意義。
您不能阻止一個方法的子類繼承而允許另一個方法繼承。
如果您需要引入不同的概念,請使用不同的層次結構,但不要嘗試設計統一的東西。

對于層次結構中的公共實現,最好的 DRY 方法是將公共實現移動到抽象類中,用于需要實例字段的方法,并將它們移動到接口默認方法中,用于不需要它們的方法。


查看完整回答
反對 回復 2023-05-17
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號