<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
定義:
多型是指不同的子類在繼承父類別後分別都重寫覆蓋了父類別的方法,即父類別同一個方法,在繼承的子類中表現出不同的形式。系統在執行時(而非編譯時),能夠根據其型別確定呼叫哪個過載的成員函數的能力,稱為多型性。
特點:
(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物件導向之多型的原理與實現的詳細內容,更多關於Java多型的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45