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

【從零開始學(xué)習(xí)JAVA | 第十五篇】 多態(tài)

這篇具有很好參考價值的文章主要介紹了【從零開始學(xué)習(xí)JAVA | 第十五篇】 多態(tài)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【從零開始學(xué)習(xí)JAVA | 第十五篇】 多態(tài)

前言:

本篇我們來解釋一下什么是多態(tài)關(guān)系,多態(tài)關(guān)系屬于面向?qū)ο笕筇卣鞯淖詈笠粋€,可以說面向?qū)ο蟮闹攸c(diǎn)就在多態(tài),因此我們要學(xué)好面向?qū)ο缶幊趟枷耄鸵獙W(xué)好多態(tài)。

多態(tài):

????????Java中的多態(tài)是指同一類對象在不同情況下可能表現(xiàn)出不同的形態(tài)和行為。它包括了方法重載方法重寫兩種形式。

????????方法重載是指在同一個類中定義了兩個或多個方法,它們的方法名相同,但參數(shù)類型、個數(shù)或順序不同。當(dāng)程序調(diào)用這個方法時,根據(jù)傳入的參數(shù)類型自動匹配最合適的方法進(jìn)行執(zhí)行。

????????方法重寫是指子類重寫父類的某一個方法,方法名和參數(shù)列表都必須相同。當(dāng)程序調(diào)用該方法時,會首先查找子類中是否存在該方法,如果存在則執(zhí)行子類中的方法,如果不存在則會向上查找父類中是否有該方法,直到找到為止。

????????多態(tài)使得同一類對象可以表現(xiàn)出不同的行為,增強(qiáng)了程序的靈活性和擴(kuò)展性,也是面向?qū)ο缶幊痰幕咎卣髦弧T贘ava中,多態(tài)實(shí)現(xiàn)通過繼承、接口和抽象類等機(jī)制來實(shí)現(xiàn)。

多態(tài)的表現(xiàn)形式:

  • 父類類型 名稱 =子類對象;

多態(tài)的前提:

  • 有繼承關(guān)系。
  • 有父類引用指向子類對象。
  • 有方法重寫。

多態(tài)調(diào)用成員變量特點(diǎn):

  • 變量調(diào)用:編譯看左邊,運(yùn)行看右邊。

  • 方法調(diào)用:編譯看左邊,運(yùn)行看右邊

package testo1;

public class test02 {
    public static void main(String[] args) {
        //利用多態(tài)創(chuàng)建對象。
        Animal a= new dog();
        //調(diào)用成員變量是編譯看左邊,運(yùn)行看左邊。
        System.out.println(a.name);
        //調(diào)用成員方法:
        //編譯看左邊,運(yùn)行看右邊。
       a.show();
    }

}
class Animal{
    String name ="動物";
    public void show()
    {
        System.out.println("animal-------show");
    }

}

class dog extends Animal{
    String name ="狗";
    @Override
    public void show ()
    {
        System.out.println("dog---------show");
    }

}
class cat extends Animal{
    String name ="狗";
    @Override
    public void show ()
    {
        System.out.println("cat---------show");
    }

}

運(yùn)行結(jié)果:

【從零開始學(xué)習(xí)JAVA | 第十五篇】 多態(tài)

在這個調(diào)用中我們可以發(fā)現(xiàn):成員變量會隨著建立對象的不同而不同。例如我們明明是Animal類型的對象,卻打印了dog里面的方法。

如果子類對父類方法進(jìn)行了重寫,那么在虛方法表中是會對父類的方法進(jìn)行覆蓋的。

其實(shí)可以類比于C++里面的多態(tài),感興趣的同學(xué)可以點(diǎn)擊這篇文章進(jìn)行觀看

C++ 動態(tài)多態(tài)實(shí)現(xiàn)底層邏輯_我是一盤牛肉的博客-CSDN博客

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

1. 增強(qiáng)程序的靈活性:通過多態(tài)機(jī)制,同一個類型的不同對象可以表現(xiàn)出不同的行為。這使得程序的調(diào)用方式更加靈活,可以針對不同的對象調(diào)用不同的方法,無需為每一個具體對象都單獨(dú)編寫方法。

2. 提高代碼的復(fù)用性:通過抽象類和接口,多態(tài)能夠很好地實(shí)現(xiàn)代碼的復(fù)用。在編寫抽象類和接口時,我們可以定義一些通用的方法和屬性,這些方法和屬性可以被具體的子類繼承和實(shí)現(xiàn),從而減少代碼的重復(fù)編寫。

3. 提高程序的可擴(kuò)展性:通過多態(tài)機(jī)制,在程序的運(yùn)行過程中,可以動態(tài)地替換對象的行為。這使得程序的擴(kuò)展性更加優(yōu)秀,增加新的功能時,只需要添加新的類和方法即可,無需修改已有的代碼。

4. 提高程序的可維護(hù)性:多態(tài)使得代碼更加松散耦合,不同的類之間的關(guān)系更加清晰明了。這使得程序的維護(hù)性更好,對于模塊性較強(qiáng)的程序,修改和維護(hù)的難度大大降低。

因此,多態(tài)在面向?qū)ο缶幊讨芯哂兄匾淖饔?,能夠提高程序的靈活性、可復(fù)用性、可擴(kuò)展性和可維護(hù)性。

多態(tài)的缺點(diǎn):

1. 程序執(zhí)行效率略低:由于多態(tài)的實(shí)現(xiàn)需要動態(tài)綁定,即在運(yùn)行時才能確定對象的類型和方法的執(zhí)行地址,所以程序的執(zhí)行效率會略微降低。

2. 代碼可讀性不高:由于多態(tài)性質(zhì)的特殊性,程序中可能出現(xiàn)一個方法被多次重載、覆蓋的情況,這樣會使得代碼的可讀性變差,不容易理解。

3. 可能會造成誤解或錯誤:由于父類無法完全限制子類的行為,所以在使用多態(tài)時,很容易陷入到某些無法預(yù)知的情況下,例如僅僅使用父類的屬性而忽略了子類的某些特殊屬性或方法,從而出現(xiàn)意外結(jié)果或錯誤。

雖然多態(tài)存在一些缺點(diǎn),但是這些缺點(diǎn)可以通過適當(dāng)?shù)木幋a和測試來避免。在實(shí)際編程中,正確使用多態(tài),在對程序的可維護(hù)性、可擴(kuò)展性以及靈活性等方面都具有重要意義。

?因?yàn)楦割惒豢梢哉{(diào)用子類的特有功能,因此例如我們在子類中的函數(shù),如果我們的創(chuàng)建對象是父類,那么就無法使用這個方法,因此我們在JAVA中設(shè)置了轉(zhuǎn)型

轉(zhuǎn)型:

多態(tài)的轉(zhuǎn)型是指通過類型轉(zhuǎn)換,將一個對象在繼承關(guān)系中沿著層次向上或向下進(jìn)行類型轉(zhuǎn)換,在轉(zhuǎn)型過程中可以訪問不同層次的方法和變量。

在Java中,類型轉(zhuǎn)換分為向上轉(zhuǎn)型向下轉(zhuǎn)型兩種:

  • 向上轉(zhuǎn)型:將子類轉(zhuǎn)換為父類對象,這種轉(zhuǎn)換不需要進(jìn)行特殊處理,自動完成向上轉(zhuǎn)型。例如:Animal animal = new Cat(),Cat類是Animal類的子類,在這里就進(jìn)行了向上轉(zhuǎn)型。
  • 向下轉(zhuǎn)型:將父類對象轉(zhuǎn)換為子類對象,需要強(qiáng)制類型轉(zhuǎn)換才能實(shí)現(xiàn)。例如:Cat cat = (Cat) animal,在這里需要將Animal類型的對象進(jìn)行強(qiáng)制類型轉(zhuǎn)換為Cat對象,才能實(shí)現(xiàn)向下轉(zhuǎn)型。

需要注意的是,在進(jìn)行向下轉(zhuǎn)型之前,必須進(jìn)行向上轉(zhuǎn)型,否則會報錯。另外,在進(jìn)行向下轉(zhuǎn)型時,必須保證進(jìn)行轉(zhuǎn)換的對象是正確的類型,否則也會報錯。

下面給出一個Java多態(tài)中的類型轉(zhuǎn)換示例,通過向上轉(zhuǎn)型和向下轉(zhuǎn)型操作,來演示多態(tài)的轉(zhuǎn)型過程:


interface Animal {
? ? public void eat();
}

class Cat implements Animal {
? ? public void eat() {
? ? ? ? System.out.println("Cat eat fish.");
? ? }

? ? public void meow() {
? ? ? ? System.out.println("Cat say meow.");
? ? }
}

public class Main {
? ? public static void main(String[] args) {
? ? ? ? Animal animal = new Cat();
? ? ? ? animal.eat();

? ? ? ? Cat cat = (Cat) animal;
? ? ? ? cat.eat();
? ? ? ? cat.meow();
? ? }
}

在上述代碼中,首先定義了一個接口 Animal,包含一個抽象方法 eat()。接著,定義一個實(shí)現(xiàn)了 Animal 接口的類 Cat,并且在 Cat 類中實(shí)現(xiàn)了 eat() 方法和 meow() 方法。在主方法中,創(chuàng)建了 Animal 類型的引用 animal,并將其設(shè)置為 Cat 類的實(shí)例。由于 Cat 類是 Animal 類的子類,因此可以進(jìn)行向上轉(zhuǎn)型。接著對 animal 調(diào)用 eat() 方法,輸出“Cat eat fish.”。

接下來進(jìn)行向下轉(zhuǎn)型,在將 Animal 類型的引用 animal 轉(zhuǎn)換為 Cat 類型的引用 cat。在向下轉(zhuǎn)型后,可以調(diào)用 Cat 類特有的方法 meow(),輸出“Cat say meow.”。

需要注意的是,在進(jìn)行向下轉(zhuǎn)型之前,必須進(jìn)行向上轉(zhuǎn)型。否則將會出現(xiàn)編譯錯誤。同時,當(dāng)進(jìn)行向下轉(zhuǎn)型時,必須進(jìn)行類型檢查,保證進(jìn)行轉(zhuǎn)換的對象是正確的類型。否則將會出現(xiàn)運(yùn)行時錯誤。

總結(jié):

多態(tài)更加豐富了子類與父類之間的關(guān)系網(wǎng),更加完善了JAVA的功能,學(xué)好面向?qū)ο笕筇卣骱苤匾魑灰炀氄莆者@里的內(nèi)容,才可以更加?jì)故斓氖褂肑AVA。

如果我的內(nèi)容對你有幫助,請點(diǎn)贊,評論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動力!

【從零開始學(xué)習(xí)JAVA | 第十五篇】 多態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-498491.html

到了這里,關(guān)于【從零開始學(xué)習(xí)JAVA | 第十五篇】 多態(tài)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【從零開始學(xué)習(xí)JAVA | 第十八篇】接口介紹

    【從零開始學(xué)習(xí)JAVA | 第十八篇】接口介紹

    目錄 前言: 接口: 如何定義一個接口: 如何使用一個接口: 接口中成員的特點(diǎn): 接口與類的區(qū)別:?? 接口的應(yīng)用: 總結(jié): ????????接口其實(shí)是為了彌補(bǔ)繼承的缺點(diǎn): 我們無法讓父類完美的適應(yīng)每一個子類的要求 。 例如我們有一個動物類的父類,有一個蝌蚪類,魚

    2024年02月10日
    瀏覽(21)
  • 【從零開始學(xué)習(xí)JAVA | 第十九篇】初識內(nèi)部類

    【從零開始學(xué)習(xí)JAVA | 第十九篇】初識內(nèi)部類

    內(nèi)部類是類的五大成員。一個類的其他的成員分別是屬性,方法,構(gòu)造方法,代碼塊。本文將詳細(xì)介紹什么是內(nèi)部類,以及內(nèi)部類的意義。 內(nèi)部類(Inner Class)是 Java 中的一個特殊概念,它指的是 一個類定義在另一個類內(nèi)部的類。 內(nèi)部類可以訪問外部類的成員,包括私有的

    2024年02月15日
    瀏覽(98)
  • 從零開始學(xué)習(xí) Java:簡單易懂的入門指南之線程同步(三十五)

    從零開始學(xué)習(xí) Java:簡單易懂的入門指南之線程同步(三十五)

    1.1賣票【應(yīng)用】 案例需求 某電影院目前正在上映國產(chǎn)大片,共有100張票,而它有3個窗口賣票,請?jiān)O(shè)計(jì)一個程序模擬該電影院賣票 實(shí)現(xiàn)步驟 定義一個類SellTicket實(shí)現(xiàn)Runnable接口,里面定義一個成員變量:private int tickets = 100; 在SellTicket類中重寫run()方法實(shí)現(xiàn)賣票,代碼步驟如下

    2024年02月08日
    瀏覽(91)
  • 從零開始學(xué)習(xí) Java:簡單易懂的入門指南之正則表達(dá)式(十五)

    在Java中,我們經(jīng)常需要驗(yàn)證一些字符串,例如:年齡必須是2位的數(shù)字、用戶名必須是8位長度而且只能包含大小寫字母、數(shù)字等。正則表達(dá)式就是用來驗(yàn)證各種字符串的規(guī)則。它內(nèi)部描述了一些規(guī)則,我們可以驗(yàn)證用戶輸入的字符串是否匹配這個規(guī)則。 先看一個不使用正則表

    2024年02月12日
    瀏覽(18)
  • 從零開始學(xué)習(xí) Java:簡單易懂的入門指南之可變參數(shù)及Collections類(二十五)

    在 JDK1.5 之后,如果我們定義一個方法需要接受多個參數(shù),并且多個參數(shù)類型一致,我們可以對其簡化. 格式: 底層: ? 其實(shí)就是一個數(shù)組 好處: ? 在傳遞數(shù)據(jù)的時候,省的我們自己創(chuàng)建數(shù)組并添加元素了,JDK底層幫我們自動創(chuàng)建數(shù)組并添加元素了 代碼演示: 注意: ?

    2024年02月07日
    瀏覽(24)
  • 【MySQL數(shù)據(jù)庫 | 第十五篇】事務(wù)

    【MySQL數(shù)據(jù)庫 | 第十五篇】事務(wù)

    ? ? 目錄 ? ?前言: ?介紹事務(wù): ?控制事務(wù): ?事務(wù)四大特性: ?并發(fā)事務(wù)問題: ?事務(wù)隔離級別: 總結(jié): ? 這章我們將進(jìn)入到MySQL基礎(chǔ)篇的最后一章:事務(wù),希望大家可以堅(jiān)持下去,跟著我一起走完MySQL的學(xué)習(xí)之旅。 MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),支持事務(wù)管理。 事

    2024年02月08日
    瀏覽(23)
  • 二十三種設(shè)計(jì)模式第十五篇--模版方法模式

    二十三種設(shè)計(jì)模式第十五篇--模版方法模式

    模板方法模式是一種行為型設(shè)計(jì)模式,它定義了一個算法的骨架,而將一些步驟延遲到子類中實(shí)現(xiàn)。通過使用這種模式,我們可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些特定步驟。 模板方法模式的核心思想是將一個算法分解為一系列步驟,并將可變的部分封裝在

    2024年02月12日
    瀏覽(24)
  • PerfView專題 (第十五篇): 如何洞察 C# 中的慢速方法

    PerfView專題 (第十五篇): 如何洞察 C# 中的慢速方法

    在 dump 分析旅程中,經(jīng)常會遇到很多朋友反饋一類問題,比如: 方法平時都執(zhí)行的特別快,但有時候會特別慢,怎么排查? 我的方法第一次執(zhí)行特別慢,能看到慢在哪里嗎? 相信有朋友肯定說,加些日志不就好了,大方向肯定是沒問題的,但加日志的顆粒度會比較粗而且侵

    2024年02月16日
    瀏覽(25)
  • 【Python入門系列】第十五篇:Python數(shù)據(jù)可視化和圖表繪制

    數(shù)據(jù)可視化是數(shù)據(jù)分析和數(shù)據(jù)科學(xué)中非常重要的一部分。通過可視化,我們可以更好地理解數(shù)據(jù)、發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系、展示數(shù)據(jù)的趨勢和模式,并向他人傳達(dá)我們的發(fā)現(xiàn)。 Python是一種功能強(qiáng)大的編程語言,擁有許多用于數(shù)據(jù)可視化的庫和工具。其中,Matplotlib是最常用的繪

    2024年02月13日
    瀏覽(27)
  • 干翻Dubbo系列第十五篇:Rest協(xié)議基于SpringBoot的規(guī)范化開發(fā)

    干翻Dubbo系列第十五篇:Rest協(xié)議基于SpringBoot的規(guī)范化開發(fā)

    文章目錄 一:Rest協(xié)議 1:協(xié)議概念 2:協(xié)議作用 二:搭建開發(fā)環(huán)境 1:父項(xiàng)目里邊引入的新的版本內(nèi)容 2:Api中的操作 3:Provider模塊 4:Consumer模塊 三:編碼 1:API模塊 2:Provider模塊 3:Consumer模塊 ????????Rest協(xié)議就是我們我們一開始基于SpringBoot或者是SpringMVC開發(fā)說的Re

    2024年02月10日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包