最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java面向對象之多態(tài)的原理與實現(xiàn)

 更新時間:2022年05月28日 11:28:40   作者:小劉要努力(? ??_??)?  
多態(tài)是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現(xiàn)出不同的形式。本文將詳解多態(tài)的原理與實現(xiàn),感興趣的可以學習一下

何為多態(tài)

定義:

多態(tài)是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現(xiàn)出不同的形式。系統(tǒng)在運行時(而非編譯時),能夠根據(jù)其類型確定調用哪個重載的成員函數(shù)的能力,稱為多態(tài)性。

特點:

(1)多態(tài)是面向對象的重要特性,簡單點說:“一個接口,多種實現(xiàn)”,就是同一種事物表現(xiàn)出的多種形態(tài)。

(2)多態(tài)就是抽象化的一種體現(xiàn),把一系列具體事物的共同點抽象出來, 再通過這個抽象的事物, 與不同的具體事物進行對話。

(3)對不同類的對象發(fā)出相同的消息將會有不同的行為。

(4)多態(tài)允許將子類的對象當作父類的對象使用,某父類型的引用指向其子類型的對象,調用的方法是該子類型的方法。這里引用和調用方法的代碼編譯前就已經決定了,而引用所指向的對象可以在運行期間動態(tài)綁定。

(5)多態(tài)分為編譯時多態(tài)(函數(shù)參數(shù)個數(shù)不同或者參數(shù)類型不同)和運行時多態(tài)(虛函數(shù)和純虛函數(shù))。

作用:

(1)應用程序不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可。大大提高程序的可復用性。//繼承

(2)派生類的功能可以被基類的方法或引用變量所調用,這叫向后兼容,可以提高可擴充性和可維護性。

(3)隱藏實現(xiàn)細節(jié),使得代碼能夠模塊化(虛函數(shù))。

代碼實現(xiàn)

運算類:

/**
 * @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("除數(shù)不能為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());
    }
}

多態(tài)理解

我們都知道封裝是為了讓類的調用者不需要知道類的實現(xiàn)細節(jié),而多態(tài)能讓類的調用者連這個類的類型是什么都不必知道,只需要知道這個對象具有某個方法即可。

因此,多態(tài)可以理解成是封裝的更進一步,讓類調用者對類的使用成本進一步降低,提高程序的可擴充性、可維護性、可復用性。

以上就是詳解Java面向對象之多態(tài)的原理與實現(xiàn)的詳細內容,更多關于Java多態(tài)的資料請關注腳本之家其它相關文章!

相關文章

  • Java中HashSet、LinkedHashSet和TreeSet區(qū)別詳解

    Java中HashSet、LinkedHashSet和TreeSet區(qū)別詳解

    這篇文章主要介紹了Java中HashSet、LinkedHashSet和TreeSet區(qū)別詳解,如果你需要一個訪問快速的Set,你應該使用HashSet,當你需要一個排序的Set,你應該使用TreeSet,當你需要記錄下插入時的順序時,你應該使用LinedHashSet,需要的朋友可以參考下
    2023-09-09
  • 遞歸出現(xiàn)棧溢出stackoverflow的問題及解決

    遞歸出現(xiàn)棧溢出stackoverflow的問題及解決

    這篇文章主要介紹了關于遞歸出現(xiàn)棧溢出stackoverflow的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java將本地項目部署到Linux服務器的實踐

    Java將本地項目部署到Linux服務器的實踐

    本文主要介紹了Java將本地項目部署到Linux服務器的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • 教你在一分鐘之內理解Java Lambda表達式并學會使用

    教你在一分鐘之內理解Java Lambda表達式并學會使用

    今天給大家?guī)У奈恼率荍ava8新特性的相關知識,文章圍繞著如何在一分鐘之內理解Java Lambda表達式并學會使用展開,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • spring?eurake中使用IP注冊及問題小結

    spring?eurake中使用IP注冊及問題小結

    在開發(fā)spring?cloud的時候遇到一個很奇葩的問題,就是服務向spring?eureka中注冊實例的時候使用的是機器名,然后出現(xiàn)localhost、xxx.xx等這樣的內容,這篇文章主要介紹了spring?eurake中使用IP注冊,需要的朋友可以參考下
    2023-07-07
  • springboot tomcat的maxHttpFormPostSize參數(shù)示例解析

    springboot tomcat的maxHttpFormPostSize參數(shù)示例解析

    這篇文章主要介紹了springboot tomcat的maxHttpFormPostSize參數(shù)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • SpringBoot JPA使用配置過程詳解

    SpringBoot JPA使用配置過程詳解

    這篇文章主要介紹了SpringBoot JPA使用配置過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java實現(xiàn)的JSONUtil工具類與用法示例

    Java實現(xiàn)的JSONUtil工具類與用法示例

    這篇文章主要介紹了Java實現(xiàn)的JSONUtil工具類與用法,結合實例形式分析了Java操作json格式數(shù)據(jù)工具類JSONUtil的定義與簡單使用技巧,需要的朋友可以參考下
    2018-07-07
  • Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼

    Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼

    這篇文章主要介紹了Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Java?IO流與NIO技術綜合應用詳細實例代碼

    Java?IO流與NIO技術綜合應用詳細實例代碼

    這篇文章主要給大家介紹了關于Java?IO流與NIO技術綜合應用的相關資料,文中包括了字節(jié)流和字符流,以及它們的高級特性如緩沖區(qū)、序列化和反序列化,同時還介紹了NIO中的通道和緩沖區(qū),以及選擇器的使用,需要的朋友可以參考下
    2024-12-12

最新評論

沾益县| 昆明市| 台东市| 会宁县| 莎车县| 余江县| 阿巴嘎旗| 含山县| 湟源县| 澳门| 石门县| 嵊州市| 云龙县| 昌平区| 天等县| 木里| 海林市| 安仁县| 广丰县| 盐津县| 津市市| 宁陵县| 新丰县| 桑植县| 南城县| 信阳市| 新竹县| 咸丰县| 茂名市| 溧水县| 长岭县| 永新县| 佳木斯市| 唐河县| 建湖县| 德令哈市| 邓州市| 碌曲县| 黔江区| 嵊州市| 南川市|