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

Java多態(tài)向上轉型和向下轉型及優(yōu)點總結

 更新時間:2025年06月03日 08:59:52   作者:英雄不問出處~  
多態(tài)指不同對象對同一方法呈現(xiàn)不同行為,通過向上轉型和重寫實現(xiàn),提升代碼靈活性與可擴展性,降低復雜度,這篇文章主要介紹了Java多態(tài)向上轉型和向下轉型及優(yōu)點的相關資料,需要的朋友可以參考下

多態(tài)

  • 什么是多態(tài)?為什么要使用多態(tài)?
    簡單來說是多種形態(tài),具體來說是去完成某個事情,當不同對象去完成同一件事表現(xiàn)出來的不同結果/狀態(tài)

打個比方就是同一個人對待不同人表現(xiàn)出來的形態(tài)是不同的

2. 多態(tài)實現(xiàn)的三個條件:

向上轉型和向下轉型

向上轉型和重寫

  • 將子類對象給父類類型的引用
    父類類型 對象名 = new 子類類型()

直接賦值的

class Animal{
    public String name;
    public int age;

    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }

    // 父類中的this是當前對象的引用
    public void eat(){
        System.out.println(this.name + " ");
    }
}

class Dog extends Animal{

    public Dog(String name,int age){
        super(name,age);// 調(diào)用父類的構造方法進行從父類繼承過來的成員的構造
    }
    public void back(){
        System.out.println(this.name + "汪汪汪 ");
    }
}
public class test {
    public static void main(String[] args) {  
        // 向上轉型
        Animal animal = new Dog("小白",3);
        animal.eat();// 調(diào)用父類自己的eat
    }
}
  • 第二種向上轉型,傳參的

  • 傳返回值的向上轉型

  • 重寫的三個條件:
    父類實現(xiàn)的方法不滿足你需要的功能的時候可以進行重寫

a. 方法的返回值一樣
方法名一樣
方法的參數(shù)列表一樣

b. 被重寫的方法的訪問修飾限定符子類中的要大于等于父類的

權限大?。簆rivate < 默認的 < protected < public

c. 被private的方法是不能被重寫的

d. 被static修飾的方法是不能被重寫的

e. 被final修飾的方法是不可以被重寫的,因為具有了常性

f. 構造方法也是不可以被重寫的

public final void eat(){
     // ...
}

被重寫的方法返回值類型可以不同,但必須是父子關系

重寫:在子類和父類中有同名的方法,

這時候子類對象給父類類型的引用(向上轉型),使用該對象再調(diào)用,調(diào)用的是子類的方法,不再是父類的方法上面的過程叫做動態(tài)綁定下面是子類重寫了父類的eat

@override可以提示你重寫是否寫錯了,提示語法錯誤

重寫和重載的區(qū)別

  • object類是所有類的父類

Dog類重寫了自己的toString,就使用自己的toString

沒有重寫就調(diào)用父類的toString

動態(tài)綁定和靜態(tài)綁定

  • 靜態(tài)綁定:在編譯的時候就確定了調(diào)用哪個方法,比如重載
  • 動態(tài)綁定:在編譯的時候不能確定,在運行時確定調(diào)用哪個方法,比如重寫

     

用代碼來解釋什么是多態(tài)

  • 不能調(diào)用子類特有的方法,只能調(diào)用父類的方法,重寫啦才調(diào)用子類的方法(而且是同一個名字的方法,比如eat())

向下轉型

  • 父類對象給子類類型的引用
  • 向下轉型不安全

  • 如果animal引用的對象是Cat對象的實例,如果是就成功,不是就走下面的打印

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

  • 能夠降低代碼的圈復雜度,避免使用大量的if-else
  • 一段代碼中條件語句和循環(huán)語句出現(xiàn)的個數(shù) , 這個個數(shù)就稱為 " 圈復雜度 ".

不使用多態(tài),打印下列圖形?

class Shape {
    public void draw() {
        System.out.println("畫圖");
    }
}

class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("?");
    }
}

class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("?");
    }
}

class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("?");
    }
}

class Test2 {
    public static void drawShapes() {
        Rect rect = new Rect();
        Cycle cycle = new Cycle();
        Flower flower = new Flower();
        String[] shapes = {"cycle","rect","cycle","rect","flower"};

        for(String shape : shapes) {
            if(shape.equals("cycle")) {
                cycle.draw();
            }else if (shape.equals("rect")) {
                rect.draw();
            }else{
                flower.draw();
            }
        }
    }

    public static void main(String[] args) {
        drawShapes();
    }
}

使用多態(tài)

public static void main(String[] args){
       Shape shapes = {new Cycle(),new Rect(),new Cycle(),new Rext(),new Flower()};
       // 向上轉型
       
       for(Shape shape : shapes){
             shape.draw();
       }
}
  • 可擴展能力強
    如果要新增一種新的形狀,使用多態(tài)該代碼成本也比較低
class Flower extends Shape{
    public void draw(){
        System.out.println("花!");
    }
}
  • 屬性沒有多態(tài)
    當父類的成員變量和子類的成員變量同名時,通過父類引用,只能訪問父類的變量

  • 構造方法是沒有多態(tài)的,因為不能重寫,重寫會造成構造的混亂

總結

  • 多態(tài)主要就是下圖中的三點

  • 向上轉型有什么用?
    是重寫的前提,一個子類對象給父類類型的引用

  • 動態(tài)綁定有什么用?
    是實現(xiàn)多態(tài)的基礎,在編譯的時候不確定調(diào)用哪個方法,在運行的時候確定調(diào)用哪個方法
    動態(tài)綁定在編譯時顯示地是調(diào)用父類的方法,但是在運行時顯示的是調(diào)用子類重寫父類的方法

到此這篇關于Java多態(tài)向上轉型和向下轉型及優(yōu)點的文章就介紹到這了,更多相關Java多態(tài)詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java拷貝指定目錄下所有內(nèi)容到minIO代碼實例

    java拷貝指定目錄下所有內(nèi)容到minIO代碼實例

    這篇文章主要介紹了java拷貝指定目錄下所有內(nèi)容到minIO代碼實例,創(chuàng)建桶 直接使用工具類先判斷,再創(chuàng)建即可,創(chuàng)建文件夾,需要注意以"/"結尾,實際也是在minIO上創(chuàng)建文件,只是作為目錄的表現(xiàn)形式展示,需要的朋友可以參考下
    2024-01-01
  • Springboot微服務項目整合Kafka實現(xiàn)文章上下架功能

    Springboot微服務項目整合Kafka實現(xiàn)文章上下架功能

    這篇文章主要介紹了Springboot微服務項目整合Kafka實現(xiàn)文章上下架功能,包括Kafka消息發(fā)送快速入門及相關功能引入,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • RocketMQ 5.x + Spring Boot 發(fā)送消息失敗全解析

    RocketMQ 5.x + Spring Boot 發(fā)送消息失敗全解

    本文給大家介紹RocketMQ 5.x + Spring Boot 發(fā)送消息失敗全解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-02-02
  • springboot中配置好登錄攔截后,swagger訪問不了問題

    springboot中配置好登錄攔截后,swagger訪問不了問題

    這篇文章主要介紹了springboot中配置好登錄攔截后,swagger訪問不了問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java ThreadLocal線程局部變量常用方法使用場景示例詳解

    java ThreadLocal線程局部變量常用方法使用場景示例詳解

    這篇文章主要介紹了為大家java ThreadLocal線程局部變量常用方法使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java中的對象和對象引用實例淺析

    Java中的對象和對象引用實例淺析

    這篇文章主要介紹了Java中的對象和對象引用,實例分析了對象與對象引用的概念與相關使用技巧,需要的朋友可以參考下
    2015-05-05
  • SpringBoot淺析安全管理之OAuth2框架

    SpringBoot淺析安全管理之OAuth2框架

    安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會出現(xiàn)問題,這篇文章主要介紹了SpringBoot安全管理OAuth2框架的使用
    2022-08-08
  • Spring框架設值注入操作實戰(zhàn)案例分析

    Spring框架設值注入操作實戰(zhàn)案例分析

    這篇文章主要介紹了Spring框架設值注入操作,結合具體實例形式分析了spring框架設值注入相關實現(xiàn)與使用方法,需要的朋友可以參考下
    2019-11-11
  • MyBatis帶參查詢的方法詳解

    MyBatis帶參查詢的方法詳解

    這篇文章主要介紹了MyBatis帶參查詢的方法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Maven項目打包成可執(zhí)行Jar文件步驟解析

    Maven項目打包成可執(zhí)行Jar文件步驟解析

    這篇文章主要介紹了Maven項目如何打包成可執(zhí)行Jar文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05

最新評論

会东县| 新源县| 潢川县| 社会| 静海县| 仁怀市| 东宁县| 南阳市| 剑阁县| 池州市| 连州市| 金堂县| 迁安市| 海兴县| 通化县| 扶沟县| 托里县| 洛扎县| 金堂县| 宜宾市| 锦屏县| 四川省| 九江县| 滨海县| 乌兰浩特市| 天水市| 淳化县| 遵义市| 海盐县| 盖州市| 大邑县| 玉田县| 漯河市| 扎赉特旗| 鹤岗市| 祁连县| 东莞市| 金秀| 兴宁市| 开鲁县| 合山市|