多態(tài)

優(yōu)秀文章

菜鳥教程 > Java 多態(tài)


說明
  • 多態(tài)的前提必須滿足繼承和重寫;

重寫

普通手機(jī)類:

public class Phone{
    
    private String displayer; // 顯示器
    private String battery; // 電池
    
    // 手機(jī)充電 
    public void charge(){
        battery = "100%";
        System.out.println("當(dāng)前電量:"+battery);
    }
    
}

壞手機(jī)類:

// 繼承手機(jī)類并重寫手機(jī)的充電方法
public class BadPhone extends Phone {

    // 壞手機(jī)充電
    public void charge(){
        System.out.println("充電失敗!");
    }
    
}

現(xiàn)在不同的手機(jī)對于同一個充電操作已經(jīng)有了不同的體現(xiàn),已經(jīng)滿足多態(tài)的前提;


實例

充電器類:

public class Charger {
    
    // 接收所有手機(jī)類,并對傳入手機(jī)執(zhí)行充電操作
    public void charge(Phone phone){
        phone.charge();
    }
    
}

使用充電器給不同手機(jī)充電:

public static void main(String[] args) {
    Charger charger = new Charger();
    charger.charge(new Phone()); //給普通手機(jī)充電
    charger.charge(new BadPhone()); // 給壞手機(jī)充電
}

執(zhí)行結(jié)果:

當(dāng)前電量:100%
充電失?。?/p>


拓展

如何使壞手機(jī)恢復(fù)正常充電功能?


策略模式

在之前的設(shè)計中,手機(jī)的充電是否正常在編碼階段就已經(jīng)決定,既然要動態(tài)的修改方法內(nèi)部的實現(xiàn),那么類的本身就不能具備固定的充電實現(xiàn):
首先抽象充電方法:

public interface ICharge {
    
    // 抽象充電方法
    public void charge();
    
}

正常充電:

public class NormalCharge implements ICharge {

    @Override
    public void charge() {
        System.out.println("充電成功!");
    }

}

異常充電:

public class AbnormalCharge implements ICharge {

    @Override
    public void charge() {
        System.out.println("充電失??!");
    }

}

修改普通手機(jī)類:

public class Phone{
    
    private String displayer; // 顯示器
    private String battery; // 電池
    private ICharge charge; // 定義充電屬性
    
    // 調(diào)用充電屬性所帶來的充電方法
    public void charge(){
        charge.charge();
    }
    
    public ICharge getCharge() {
        return charge;
    }
    
    public void setCharge(ICharge charge) {
        this.charge = charge;
    }
}

使用充電器給不同手機(jī)充電:

public static void main(String[] args) {
    Charger charger = new Charger();
        
    // 實例化手機(jī)
    Phone phone = new Phone();
    // 設(shè)置正常充電操作
    phone.setCharge(new NormalCharge());
    
    // 實例化手機(jī)
    Phone badPhone = new Phone();
    // 設(shè)置異常充電操作
    badPhone.setCharge(new AbnormalCharge());
        
    charger.charge(phone); //給正常手機(jī)充電
    charger.charge(badPhone); // 給壞手機(jī)充電
}

執(zhí)行結(jié)果:

充電成功!
充電失??!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容