您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java面向對象之多態的原理是什么與怎么實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java面向對象之多態的原理是什么與怎么實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
定義:
多態是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現出不同的形式。系統在運行時(而非編譯時),能夠根據其類型確定調用哪個重載的成員函數的能力,稱為多態性。
特點:
(1)多態是面向對象的重要特性,簡單點說:“一個接口,多種實現”,就是同一種事物表現出的多種形態。
(2)多態就是抽象化的一種體現,把一系列具體事物的共同點抽象出來, 再通過這個抽象的事物, 與不同的具體事物進行對話。
(3)對不同類的對象發出相同的消息將會有不同的行為。
(4)多態允許將子類的對象當作父類的對象使用,某父類型的引用指向其子類型的對象,調用的方法是該子類型的方法。這里引用和調用方法的代碼編譯前就已經決定了,而引用所指向的對象可以在運行期間動態綁定。
(5)多態分為編譯時多態(函數參數個數不同或者參數類型不同)和運行時多態(虛函數和純虛函數)。
作用:
(1)應用程序不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可。大大提高程序的可復用性。//繼承
(2)派生類的功能可以被基類的方法或引用變量所調用,這叫向后兼容,可以提高可擴充性和可維護性。
(3)隱藏實現細節,使得代碼能夠模塊化(虛函數)。
運算類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : Operation * @description : [運算類] * @createTime : [2022/5/27 20:04] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:04] * @updateRemark : [描述說明本次修改內容] */ public abstract class Operation { private double _numberA; private double _numberB; public double get_numberA() { return _numberA; } public void set_numberA(double _numberA) { this._numberA = _numberA; } public double get_numberB() { return _numberB; } public void set_numberB(double _numberB) { this._numberB = _numberB; } public abstract double getResult(); }
加法類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationAdd * @description : [加法類] * @createTime : [2022/5/27 20:13] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:13] * @updateRemark : [描述說明本次修改內容] */ public class OperationAdd extends Operation { @Override public double getResult() { double result = 0; result = super.get_numberA() + super.get_numberB(); return result; } }
減法類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationSub * @description : [減法類] * @createTime : [2022/5/27 20:13] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:13] * @updateRemark : [描述說明本次修改內容] */ public class OperationSub extends Operation { @Override public double getResult() { double result = 0; result = super.get_numberA() - super.get_numberB(); return result; } }
乘法類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationMul * @description : [乘法類] * @createTime : [2022/5/27 20:15] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:15] * @updateRemark : [描述說明本次修改內容] */ public class OperationMul extends Operation { @Override public double getResult() { double result = 0; result = super.get_numberA() * super.get_numberB(); return result; } }
除法類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationDiv * @description : [除法類] * @createTime : [2022/5/27 20:16] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:16] * @updateRemark : [描述說明本次修改內容] */ public class OperationDiv extends Operation { @Override public double getResult() { double result = 0; if (super.get_numberB() == 0) { System.out.println("除數不能為0"); } else { result = super.get_numberA() / super.get_numberB(); } return result; } }
簡單工廠類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : OperationFactory * @description : [簡單工廠類] * @createTime : [2022/5/27 20:16] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:16] * @updateRemark : [描述說明本次修改內容] */ public class OperationFactory { public static Operation createOperation(String operate) { Operation operation = null; switch (operate) { case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSub(); break; case "*": operation = new OperationMul(); break; case "/": operation = new OperationDiv(); break; } return operation; } }
客戶端主方法類:
/** * @author : [LiuYanQiang] * @version : [v1.0] * @className : Main * @description : [客戶端] * @createTime : [2022/5/27 20:18] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/27 20:18] * @updateRemark : [描述說明本次修改內容] */ public class Main { public static void main(String[] args) { Operation operation; operation=OperationFactory.createOperation("+"); operation.set_numberA(1); operation.set_numberB(2); System.out.println(operation.getResult()); } }
我們都知道封裝是為了讓類的調用者不需要知道類的實現細節,而多態能讓類的調用者連這個類的類型是什么都不必知道,只需要知道這個對象具有某個方法即可。
因此,多態可以理解成是封裝的更進一步,讓類調用者對類的使用成本進一步降低,提高程序的可擴充性、可維護性、可復用性。
讀到這里,這篇“Java面向對象之多態的原理是什么與怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。