亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java多態(tài)向上轉(zhuǎn)型和向下轉(zhuǎn)型及優(yōu)點(diǎn)總結(jié)

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

多態(tài)

  • 什么是多態(tài)?為什么要使用多態(tài)?
    簡(jiǎn)單來(lái)說(shuō)是多種形態(tài),具體來(lái)說(shuō)是去完成某個(gè)事情,當(dāng)不同對(duì)象去完成同一件事表現(xiàn)出來(lái)的不同結(jié)果/狀態(tài)

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

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

向上轉(zhuǎn)型和向下轉(zhuǎn)型

向上轉(zhuǎn)型和重寫

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

直接賦值的

class Animal{
    public String name;
    public int age;

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

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

class Dog extends Animal{

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

  • 傳返回值的向上轉(zhuǎn)型

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

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

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

權(quán)限大?。簆rivate < 默認(rèn)的 < protected < public

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

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

e. 被final修飾的方法是不可以被重寫的,因?yàn)榫哂辛顺P?/p>

f. 構(gòu)造方法也是不可以被重寫的

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

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

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

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

@override可以提示你重寫是否寫錯(cuò)了,提示語(yǔ)法錯(cuò)誤

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

  • object類是所有類的父類

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

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

動(dòng)態(tài)綁定和靜態(tài)綁定

  • 靜態(tài)綁定:在編譯的時(shí)候就確定了調(diào)用哪個(gè)方法,比如重載
  • 動(dòng)態(tài)綁定:在編譯的時(shí)候不能確定,在運(yùn)行時(shí)確定調(diào)用哪個(gè)方法,比如重寫

     

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

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

向下轉(zhuǎn)型

  • 父類對(duì)象給子類類型的引用
  • 向下轉(zhuǎn)型不安全

  • 如果animal引用的對(duì)象是Cat對(duì)象的實(shí)例,如果是就成功,不是就走下面的打印

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

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

不使用多態(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()};
       // 向上轉(zhuǎn)型
       
       for(Shape shape : shapes){
             shape.draw();
       }
}
  • 可擴(kuò)展能力強(qiáng)
    如果要新增一種新的形狀,使用多態(tài)該代碼成本也比較低
class Flower extends Shape{
    public void draw(){
        System.out.println("花!");
    }
}
  • 屬性沒(méi)有多態(tài)
    當(dāng)父類的成員變量和子類的成員變量同名時(shí),通過(guò)父類引用,只能訪問(wèn)父類的變量

  • 構(gòu)造方法是沒(méi)有多態(tài)的,因?yàn)椴荒苤貙?,重寫?huì)造成構(gòu)造的混亂

總結(jié)

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

  • 向上轉(zhuǎn)型有什么用?
    是重寫的前提,一個(gè)子類對(duì)象給父類類型的引用

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

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

相關(guān)文章

  • Python爬蟲之爬取2020女團(tuán)選秀數(shù)據(jù)

    Python爬蟲之爬取2020女團(tuán)選秀數(shù)據(jù)

    本文將對(duì)比《青春有你2》和《創(chuàng)造營(yíng)2020》全體小姐姐,鑒于兩個(gè)節(jié)目的數(shù)據(jù)采集和處理過(guò)程基本相似,在使用Python做數(shù)據(jù)爬蟲采集的章節(jié)中將只以《創(chuàng)造營(yíng)2020》為例做詳細(xì)介紹。感興趣的同學(xué)可以照貓畫虎去實(shí)操一下《青春有你2》的數(shù)據(jù)爬蟲采集,需要的朋友可以參考下
    2021-04-04
  • java日期工具類實(shí)例分享

    java日期工具類實(shí)例分享

    本文介紹一個(gè)java日期工具類,功能有英文簡(jiǎn)寫、英文全稱、精確到毫秒的完整時(shí)間、中文簡(jiǎn)寫、中文全稱等方法
    2014-01-01
  • 微信支付java版本之獲取Access_token

    微信支付java版本之獲取Access_token

    這篇文章主要介紹了微信支付java版本之獲取Access_token,java如何獲取Access_token,感興趣的小伙伴們可以參考一下
    2016-08-08
  • java求解集合的子集的實(shí)例

    java求解集合的子集的實(shí)例

    這篇文章主要介紹了 java求解集合的子集的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握這樣的方法,需要的朋友可以參考下
    2017-10-10
  • Gson中的TypeToken與泛型擦除詳情

    Gson中的TypeToken與泛型擦除詳情

    這篇文章主要介紹了Gson中的TypeToken與泛型擦除詳情,其Gson類提供了toJson()與fromJson()方法,分別用來(lái)序列化與反序列化,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • 淺談java的守護(hù)線程與非守護(hù)線程

    淺談java的守護(hù)線程與非守護(hù)線程

    這篇文章主要介紹了淺談java的守護(hù)線程與非守護(hù)線程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 使用springboot不自動(dòng)初始化數(shù)據(jù)庫(kù)連接池

    使用springboot不自動(dòng)初始化數(shù)據(jù)庫(kù)連接池

    這篇文章主要介紹了使用springboot不自動(dòng)初始化數(shù)據(jù)庫(kù)連接池,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實(shí)現(xiàn)簡(jiǎn)單小畫板

    Java實(shí)現(xiàn)簡(jiǎn)單小畫板

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單小畫板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • LibrarySystem圖書管理系統(tǒng)(二)

    LibrarySystem圖書管理系統(tǒng)(二)

    這篇文章主要為大家詳細(xì)介紹了LibrarySystem圖書管理系統(tǒng)開發(fā)第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • ?Spring?中?Bean?的生命周期詳解

    ?Spring?中?Bean?的生命周期詳解

    這篇文章主要介紹了Spring中Bean的生命周期詳解,Java中的公共類稱之為Bean或Java?Bean,而Spring中的Bean指的是將對(duì)象的生命周期
    2022-09-09

最新評(píng)論