Java se的語言特征之多態

目錄

  • 滿足多態的條件
  • 動態綁定第一步
  • 動態綁定第二步
  • 動態綁定第三步
  • 參數列表,返回類型,訪問修飾限定符區別
  • 有動態綁定,那是不是有靜態綁定
  • 向下轉型
  • 抽象類
  • 接口
    • 實現多個接口(先繼承再接口,接口用",")

滿足多態的條件

定義:去完成某個狀態的時候,當不同的對象去完成的時候會產生不同狀態(通俗理解為看人下菜)

滿足多態的條件:
1>必須在繼承關系上,才可以向上轉型
2>子類和父類有同名的覆蓋(重寫)方法
3>通過父類對象的引用,去調用這個重寫的方法
完成以上的三個部分,就會發生動態綁定,動態綁定為多態的基礎

通過父類的引用,只能調用父類自己獨有的屬性,方法,構造方法

動態綁定第一步

向上轉型:子類定義的變量,方法給父類

Dog dog = new Dog("小黃",8);
Animal animal = dog;
Animal animal = new Dog("小黃", 8);

這個被稱為直接賦值型
是通過animal這個引用指向了dog這個引用所指向的對象

傳參時候進行向上轉型(方法的參數)

public static void func1(Animal animal){}
public static void main(String [ ] args){Dog dog = new Dog("小黃",8);func1(dog);
}

返回值進行向上轉型

public static Animal func2( ){Dog dog = new Dog("小黃", 8);return dog;
}

動態綁定第二步

public static Animal func2( ){System.out.println(this.name + "吃飯");
}
@Override(可以在此寫注釋,起到防止錯誤作用)
public void eat( ){System.out.println(this.name + "吃狗糧");
}

注意:
1>在這里面,返回值,方法名以及參數鏈表要相同
2>被重寫的訪問修飾限定符,子類一定要大于父類
3>被private修飾的方法不可重寫
4>被static修飾的方法不可以重寫
5>被final修飾的方法不可重寫
6>構造方法不可以重寫

動態綁定第三步

Animal animal  = new Dog("小黃",8);
animal eat( );

在產生了重寫以后,animal忽然就變成了調用子類的eat.這個過程就叫做動態綁定

父類與子類也可以構成重寫,被稱為協變類型

public Dog eat( ){System.out.println(this.name + "吃飯");return null;
}
public Animal eat( ){System.out.println(this.name + "吃狗糧");
}

所有的父類,默認都是Object類

public static void eatFun(Animal animal){animal.aet( );
}
public static void main(String [ ] args){Dog dog  = new Dog("小黃", 8);eatFun(dog);Cat cat = new Cat("三月",6);eatFun(cat);
}

當父類的引用,引用的子類對象不一樣的時候,調用這個重寫的方法,表現出的行為是不一樣的,我們把這種思想叫做多態

參數列表,返回類型,訪問修飾限定符區別

在這里插入圖片描述

有動態綁定,那是不是有靜態綁定

add(int a, int b)
add(int a, int b, int c)
main( ){add(1, 2);add(1, 2 ,3);
}

這上面這種就是靜態綁定

向下轉型

顧名思義,就是父類給子類

Animal animal = new Dog("小黃", 8 );
//狗可以為一個動物
Animal animal = new Cat ("三月", 6);
//貓也可以為一個動物Animal animal = new Dog("小黃", 8 );
Dog dog = animal;
//但是在這個里面,動物不一定是狗,
//所以向下轉型是不安全的Animal animal = new Dog ("小黃", 8 );
Dog dog = (Dog) animal;
//因為本身不安全的,所以這里要進行強轉
dog.bark( );Cat cat = (Cat)animal;
cat.miaomaio( );
//這里的話就會錯,因為animal在上面是引用對象為Dog,
//所以dog可以成功轉型,Cat就不可以

在父類的構造方法里面,可以調用子類和父類重寫的方法,此時會調用子類的方法,此時也會發生動態綁定,但是注意,不可以這么寫

抽象類

abstract class Shape{public abstract void draw( );
}

1>abstract修飾的類,方法為抽象類(方法)
2>抽象類不可以實例化一個對象
3>抽象類中可以和普通類一樣,定義方法和變量
4>當一個普通類繼承了抽象類,那么要重寫這個抽象類中的抽象方法
5>抽象類的出現就是為了被繼承
6>abstract 和 final 是天敵,不可以共存
7>被private static 修飾的這個抽象方法也不可以

接口

語法:
1>interface方法來修飾的(就是創建方法時候,把class換成interface)
2>接口中不可以被實現的方法,只有抽象方法(static , deafult修飾的不受限制)
3>接口中的抽象方法,默認都是public abstarct 修飾的
4>接口中的成員變量,默認都是public static final修飾的
5>接口不能進行實例化
6>類和接口之間的關系,可以使用implements來進行關聯
7>接口也有對應的字節碼文件

注意:
1>接口中的方法不可以在接口中實現,只能由實現接口的類來實現
2>接口中不能包含構造方法,以及靜態代碼塊

實現多個接口(先繼承再接口,接口用",")

interface A{void test A( );
}
interface B extends A{void test B( );
}

這個里面的話,B也具備了A的功能,但是后面用接口B的時候,B和A都要重新實現

2個關系
1>類與接口之間的關系,用implements
2>接口與接口之間的關系,用extends

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215616.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215616.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215616.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MTK Android13 user版本進入engineermode的Bluetooth測試項時閃退

平臺:MT6771 android13 問題描述:進入到工模,點擊進入Bluetooth測試項直接閃退 Log如下: 07-31 10:15:51.480 3605 3605 D EM/EmUtils: getEmAidlService ... 07-31 10:15:51.481 398 398 I servicemanager: Could not fin…

42、JSON 函數

目錄 1. json 的兩個常用方法 json.dumps()方法 :把python對象編碼為json字符串 json.loads()方法:把json字符串編碼成python對象 1. json 的兩個常用方法 json 的存在有兩種形式。 一種是:對象的形式存在,我們叫它 json 對象。…

36V H 橋有刷直流驅動芯片GC8870 GC8871 GC8872的數據選型分析

36V H 橋驅動芯片GC8870 GC8871 GC8872都可替代TI的DRV8870/8871/8872,寬電壓,內置電荷泵,短地短電源保護,限流等功能,可應用于水泵,掃地機器人,開關等產品中

數據庫系統 --- 關系模型

一、關系模型的數據結構以及形式化定義 1.關系 域:一組具有相同數據結構的值的集合。 笛卡爾積:域上的一種集合運算。多個集合做笛卡爾積的結果是每個集合取一個元素組合得到的一個新的集合。 域的基數:一個域上允許的不同取值的個數。 關系&…

mac 安裝anaconda和lightgbm

mac安裝anaconda不要去清華大學的anaconda的安裝包列表去下載安裝包, 去[官網](Free Download | Anaconda)下載, 清華的版本太老了, 老到臉conda 安裝lightgbm都不只支持 安裝好anaconda 后, 能用conda install xxx 的盡量不用pip install 其他的不知道, 用pip install ligh…

護眼臺燈為什么護眼?適合備考使用的臺燈推薦

臺燈是大家生活中必不可少的一盞燈具,尤其是當夜幕降臨時,許多仍然需要工作、或者學習的人,都要使用臺燈來提供充足的照明環境。如今隨著生活的高度發展,大家對臺燈的要求也愈發精進了一步,不僅需要能夠提供照明的&…

報表控件FastReport .NET v2024功能演示—更改圖圖片形狀

報表生成器FastReport .NET 是適用于.NET Core 3,ASP.NET,MVC和Windows窗體的全功能報告庫。使用FastReport .NET,您可以創建獨立于應用程序的.NET報告。 FastReport .net下載(qun:585577353)https://www.e…

webpack的使用

一、5 大核心概念 entry(入口) 指示 Webpack 從哪個文件開始打包 output(輸出) 指示 Webpack 打包完的文件輸出到哪里去,如何命名等 loader(加載器) webpack 本身只能處理 js、json 等資源…

配電箱安全檢查

配電箱怎么檢查,如何識破電箱安全隱患? (1)一物一碼:每個配電箱都有獨一無二標識二維碼,巡檢人員到達現場掃碼即可填寫巡檢記錄,查看配電箱的參數、負責人、操作規則等信息; &#x…

如何用PHP寫一個1688平臺下的商品API接口代碼?

一 定義 PHP(全稱:Hypertext Preprocessor)是一種廣泛用于開發Web應用程序的服務器端腳本語言。它是一種開源的編程語言,特別適用于快速構建動態網頁和Web應用程序。 在PHP中,您可以使用1688商品API接口來獲取和操作…

韻達速遞查詢,韻達速遞單號查詢,對需要的單號記錄進行標記

批量查詢韻達速遞單號的物流信息,對需要的單號記錄進行標記。 所需工具: 一個【快遞批量查詢高手】軟件 韻達速遞單號若干 操作步驟: 步驟1:運行【快遞批量查詢高手】軟件,并登錄 步驟2:點擊主界面左上角…

starknet學習資料匯集這一篇就夠了(持續更新)

文章目錄 官方資料wtf starknet學習資料Starknet Astro 社區官方資料 starknet-foundry 官方github:https://github.com/foundry-rs/starknet-foundry 官方文檔:https://foundry-rs.github.io/starknet-foundry/ https://book.cairo-lang.org/zh-cn/index.html https://boo…

數據結構:第9關:刪除鏈表中滿足區間值的結點

任務描述編程要求 輸入輸出測試說明來源 任務描述 本關任務:利用單鏈表表示一個遞增的整數序列,刪除鏈表中值大于等于mink且小于等于maxk的所有元素(mink和maxk是給定的兩個參數,其值可以和表中的元素相同,也可以不同…

銀行如何篩選跨網文件交換產品,提升業務效率?

銀行業在我國經濟發展和社會運轉中承載著舉足輕重的作用和意義,進入互聯網時代,網絡的運算和數據管理能力助力銀行業高速發展,但同樣帶來了一些網絡安全隱患,網絡攻擊、數據竊取、敏感信息泄露等問題影響著銀行業的根基。為響應和…

python作業題百度網盤,python123作業答案

大家好,小編來為大家解答以下問題,python作業題百度網盤,python123作業答案,今天讓我們一起來看看吧! 完整項目分享: 鏈接: https://pan.baidu.com/s/1CTMOgLYteLrWRaRnouB0SQ?pwd12hf 提取碼: 12hf &…

[Linux 基礎] Linux使用git上傳gitee三板斧

文章目錄 1、使用git1.1 安裝git1.2 在Gitee上創建項目1.2.1 使用Gitee創建項目1.2.2 上傳本地代碼到遠端倉庫 1.3 git上傳三板斧1.3.1 三板斧第一招:git add1.3.2 三板斧第二招:git commit1.3.3 三板斧第三招:git push 1、使用git 1.1 安裝…

【教3妹學編程-算法題】下一個更大元素 IV

3妹:“太陽當空照,花兒對我笑,小鳥說早早早,你為什么背上炸藥包” 2哥 :3妹,什么事呀這么開發。 3妹:2哥你看今天的天氣多好啊,陽光明媚、萬里無云、秋高氣爽,適合秋游。 2哥&#x…

商城免費搭建之java商城 java電子商務Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 鴻鵠云商

鴻鵠云商 SAAS云產品概述 【SAAS云平臺】打造全行業全渠道全場景的SaaS產品,為店鋪經營場景提供一體化解決方案;門店經營區域化、網店經營一體化,本地化、全方位、一站式服務,為多門店提供統一運營解決方案;提供豐富多…

使用C++和雙指針算法移除數組中的元素,且原地移除,不使用額外的空間

輸入一個數組nums和一個值val&#xff0c;在該數組中&#xff0c;凡是與val相等的元素全部移除&#xff0c;并最終輸出該數組&#xff0c;C代碼如下&#xff1a; #include<iostream> #include<vector> #include<ctime>//計算代碼所需要的時間 using namespac…

qt 容器QVector,QMap,QHash的常見使用與該迭代器的簡單介紹

一. QVector容器是一個動態數組&#xff0c;可以容納任意數量的元素,在相鄰的內存中存儲給定的數據類型作為一組數據,在QVector前部或中間位置插入元素都會導致內存中大量的數據元素移動,這使得操作速度會減慢.可使用迭代器對這組數據進行訪問. 和其他的容器類型類似,QVector…