国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

類的多態(tài)性(JAVA)

這篇具有很好參考價值的文章主要介紹了類的多態(tài)性(JAVA)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

多態(tài)?

重寫?

向上轉(zhuǎn)型

類的多態(tài)性例子:?

多態(tài)的優(yōu)缺點


?

多態(tài)?

所有的OOP語言都會有三個特征:

  1. 封裝(點擊可跳轉(zhuǎn))
  2. 繼承(點擊可跳轉(zhuǎn))
  3. 多態(tài)

多態(tài)體現(xiàn):在代碼運行時,當傳遞不同類對象時,會調(diào)用對應(yīng)類中的方法。

在java中要實現(xiàn)多態(tài),必須要滿足如下幾個條件,缺一不可:

  1. 必須在繼承體系下;
  2. 子類必須要對父類中方法進行重寫?;
  3. 通過父類的引用調(diào)用重寫的方法。

重寫?

繼承我們已經(jīng)知道了,那我們面臨的第一個問題就是什么是重寫?

重寫(override):也稱為覆蓋。重寫是子類對父類非靜態(tài)、非private修飾,非final修飾,非構(gòu)造方法等的實現(xiàn)過程進行重新編寫, 返回值(返回類型滿足父子關(guān)系也可以)和形參都不能改變。即外殼不變,核心重寫!

重寫的好處在于子類可以根據(jù)需要,定義特定于自己的行為。 也就是說子類能夠根據(jù)需要實現(xiàn)父類的方法。

注:避免在構(gòu)造方法中調(diào)用重寫的方法。

方法重寫的規(guī)則:

  1. 子類在重寫父類的方法時,一般必須與父類方法原型一致:方法名,參數(shù)列表要完全一致;
  2. 被重寫的方法返回值類型可以不同,但是必須是具有父子關(guān)系的;
  3. 訪問權(quán)限不能比父類中被重寫的方法的訪問權(quán)限更低。例如:如果父類方法被public修飾,則子類中重寫該方法就不能聲明為 protected,父類被static、private修飾的方法、構(gòu)造方法都不能被重寫;
  4. 重寫的方法, 可以使用 @Override 注解來顯式指定,有了這個注解能幫我們進行一些合法性校驗。例如不小心將方法名字拼寫錯了 (比如寫成 aet),那么此時編譯器就會發(fā)現(xiàn)父類中沒有 aet 方法,就會編譯報錯, 提示無法構(gòu)成重寫。

?此時我們已經(jīng)滿足兩點了還差最后一點。而第三點是通過父類的引用調(diào)用重寫的方法。而要實現(xiàn)這一點就必須進行向上轉(zhuǎn)型。

向上轉(zhuǎn)型

向上轉(zhuǎn)型就是為了實現(xiàn)代碼通過父類的引用調(diào)用重寫的方法。向上轉(zhuǎn)型其實很簡單

向上轉(zhuǎn)型:實際就是創(chuàng)建一個子類對象,將其當成父類對象來使用。

語法格式:父類類型 對象名 = new 子類類型()
類的多態(tài)性(JAVA),開發(fā)語言,java

向上轉(zhuǎn)型的使用場景:

  • 直接賦值(上面的例子就是直接賦值)
  • 方法傳參
  • 方法返回

向上轉(zhuǎn)型的優(yōu)點:讓代碼實現(xiàn)更簡單靈活。
向上轉(zhuǎn)型的缺陷:不能調(diào)用到子類特有的方法。

使用了向上轉(zhuǎn)型之后就可以通過父類的引用調(diào)用重寫的方法,而不是重寫方法的就沒法調(diào)用。

class Animal{
    public String name = "花花";
    public void eat(){
        System.out.println(this.name+"正在吃飯");
    }
}
class Dog extends Animal{
    @Override
    public void eat(){
        System.out.println(this.name+"在吃狗糧");
    }
    public void a(){
        System.out.println("hhh");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.eat();
        //打印花花在吃狗糧
        Animal dog2 = new Animal();
        dog2.eat();
        //打印花花正在吃飯
    }
}

類的多態(tài)性(JAVA),開發(fā)語言,java

類的多態(tài)性例子:?

class Animal{
    public String name = "花花";
    public void eat(){
        System.out.println(this.name+"正在吃飯");
    }
}
class Dog extends Animal{
    @Override
    public void eat(){
        System.out.println(this.name+"在吃狗糧");
    }
}
class Cat extends Animal{
    @Override
    public void eat(){
        System.out.println(this.name+"在吃貓糧");
    }
}
public class Test {
    public static void fun(Animal arr){
        arr.eat();
    }
    public static void main(String[] args) {
        //數(shù)組的每個成員都會發(fā)生向上轉(zhuǎn)型
        Animal[] arr = {new Dog(),
                        new Cat()};
    //此時就會發(fā)現(xiàn)調(diào)用同一個方法fun()會有兩種結(jié)果
        fun(arr[0]);
        fun(arr[1]);
    }
}

類的多態(tài)性(JAVA),開發(fā)語言,java

多態(tài)的優(yōu)缺點

  • 能夠降低代碼的 "圈復(fù)雜度", 避免使用大量的 if - else;

什么叫 "圈復(fù)雜度" ?

圈復(fù)雜度是一種描述一段代碼復(fù)雜程度的方式。一段代碼如果平鋪直敘,那么就比較簡單容易理解。而如果有很多的條件分支或者循環(huán)語句,就認為理解起來更復(fù)雜;

因此我們可以簡單粗暴的計算一段代碼中條件語句和循環(huán)語句出現(xiàn)的個數(shù),這個個數(shù)就稱為 "圈復(fù)雜度"。如果一個方法的圈復(fù)雜度太高, 就需要考慮重構(gòu)。文章來源地址http://www.zghlxwxcb.cn/news/detail-636235.html

  • 可擴展能力更強;
  • 多態(tài)缺陷:代碼的運行效率降低。

到了這里,關(guān)于類的多態(tài)性(JAVA)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python 中的多態(tài)性

    多態(tài)性是 OOP 的一個特征,這意味著一個名稱可以具有不同的功能。 單個實體可以采取不同的形式。 本篇文章將介紹如何在 Python 中實現(xiàn)多態(tài)性。 理解這一點的最佳方法是使用 len() 函數(shù)。 對于不同的對象,該函數(shù)有不同的解釋。 對于列表,它將返回存在的總元素;對于字符

    2024年02月05日
    瀏覽(32)
  • 實訓(xùn)7:虛函數(shù)與多態(tài)性

    參考代碼 by 小嚳苦 答案僅供參考! 實驗?zāi)康?掌握運算符重載的方法; 實驗任務(wù) 參考實驗指導(dǎo)書第八章的實驗任務(wù) 1。 實驗步驟 參考實驗指導(dǎo)書第八章的實驗步驟 1。 測試說明 平臺會對你編寫的代碼進行測試: 輸入描述:空格隔開的兩個整數(shù)x和y,表示一個坐標 輸出描述

    2024年02月07日
    瀏覽(35)
  • C# 類class、繼承、多態(tài)性、運算符重載,相關(guān)練習題

    34.函數(shù)重載 35.幾個相同的函數(shù)? print() ,用于打印不同的數(shù)據(jù)類型。 ? 36.基類和派生類 ? 37.基類的初始化 ? 38.多重繼承 ? 39.動態(tài)多態(tài)性 ? 40.抽象性和虛方法 ? 41.通過虛方法 area() 來計算不同形狀圖像的面積 ? 42.運算符重載的實現(xiàn) ? @www.runoob.com?

    2024年02月09日
    瀏覽(32)
  • 【C++入門到精通】C++入門 —— 繼承(基類、派生類和多態(tài)性)

    【C++入門到精通】C++入門 —— 繼承(基類、派生類和多態(tài)性)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的命名空間的一些知識點以及關(guān)于C++的缺省參數(shù)、函數(shù)重載,引用 和 內(nèi)聯(lián)函數(shù)也認識了什么是類和對象以及怎么去new一個 ‘對象’ ,也了解了C++中的模版,以及學習了幾個STL的結(jié)構(gòu)也相信大家都掌握

    2024年02月11日
    瀏覽(32)
  • 【期末不掛科-C++考前速過系列P5】大二C++實驗作業(yè)-多態(tài)性(3道代碼題)【解析,注釋】

    【期末不掛科-C++考前速過系列P5】大二C++實驗作業(yè)-多態(tài)性(3道代碼題)【解析,注釋】

    前言 大家好吖,歡迎來到 YY 滴C++考前速過系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過C++的老鐵 主要內(nèi)容含: 歡迎訂閱 YY 滴C++專欄!更多干貨持續(xù)更新!以下是傳送門! YY的《C++》專欄 YY的《C++11》專欄 YY的《Linux》專欄 YY的《數(shù)據(jù)結(jié)構(gòu)》專欄 YY的《C語言基礎(chǔ)》專欄 YY的《

    2024年01月25日
    瀏覽(112)
  • 年度語言之--c#與java的多態(tài)

    年度語言之--c#與java的多態(tài)

    引言 多態(tài)是面向?qū)ο缶幊讨械囊粋€核心概念,它賦予語言更強大的表達力和靈活性。 Java和C#作為廣泛使用的兩中面向?qū)ο缶幊陶Z言,多態(tài)這一特性都起到重要的作用,但它們實現(xiàn)這一概念的方式存在著一些差異。 本文將討論Java與C#在實現(xiàn)多態(tài)方面的不同。 我們將分析這兩種

    2024年02月22日
    瀏覽(43)
  • Java語言------四種內(nèi)部類的詳細講解

    Java語言------四種內(nèi)部類的詳細講解

    目錄 一.內(nèi)部類的介紹 二.內(nèi)部類的種類 2.1實例內(nèi)部類? ? ?? 2.2.靜態(tài)內(nèi)部類 2.3局部內(nèi)部類 2.4匿名內(nèi)部類 總結(jié)? ? ? ? 內(nèi)部類: 一個類定義在? 另一個類? 的? 內(nèi)部。?? ? ? ?內(nèi)部類分為 四種 : 實例內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類。 使用時機:當一個事

    2023年04月25日
    瀏覽(23)
  • c、c++、java、python、js對比【面向?qū)ο蟆⑦^程;解釋、編譯語言;封裝、繼承、多態(tài)】

    c、c++、java、python、js對比【面向?qū)ο?、過程;解釋、編譯語言;封裝、繼承、多態(tài)】

    目錄 內(nèi)存管理、適用 區(qū)別 C 手動內(nèi)存管理:C語言沒有內(nèi)置的安全檢查機制,容易出現(xiàn)內(nèi)存泄漏、緩沖區(qū)溢出等安全問題。 適用于系統(tǒng)級編程 C++ 手動內(nèi)存管理:C++需要程序員手動管理內(nèi)存,包括分配和釋放內(nèi)存,這可能導(dǎo)致內(nèi)存泄漏和指針錯誤。 適用于游戲引擎和系統(tǒng)級編

    2024年02月08日
    瀏覽(51)
  • 反射機制-體會反射的動態(tài)性案例(尚硅谷Java學習筆記)

    反射機制-體會反射的動態(tài)性案例(尚硅谷Java學習筆記)

    // 舉例01 public class Reflect{ } 案例:榨汁機榨水果汁,水果分別有果(com.reflect.Apple)、香蕉(Banana)、桔子(Orange)等。 效果如圖。 提示: 1、聲明(Fruit)水果接口,包含榨汁抽象方法: void squeeze(); /skwi:z/ 2、聲明榨汁機(Juicer),包含運行方法: public void run(Fruit f),方法體中,調(diào)用f的榨汁方

    2024年02月11日
    瀏覽(30)
  • 【JAVA語言-第12話】API中的工具類 之 Date,DateFormat,SimpleDateFormat,Calendar類的詳細解析

    【JAVA語言-第12話】API中的工具類 之 Date,DateFormat,SimpleDateFormat,Calendar類的詳細解析

    目錄 日期和時間 1.1 Date類 1.1.1 概述 1.1.2 常用方法? 1.1.3 案例 1.2 DateFormat類? 1.2.1 概述 1.2.2 常用方法 1.3 SimpleDateFormat類 1.3.1 概述 1.3.2 構(gòu)造方法 1.3.3 模式字符? 1.3.4 日期轉(zhuǎn)字符串 1.3.5 字符串轉(zhuǎn)日期 1.4?Calendar類 1.4.1 概述 1.4.2 靜態(tài)方法 1.4.3 常用成員方法 1.4.4 成員方法中參數(shù)

    2024年02月02日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包