【Java基礎|第十三篇】面向對象基礎(三)——繼承(一)繼承的理解,實現,特點……

(四)面向對象:

5、繼承:
(1)理解:
? ? ? ? 概念:

? ? ? ? ? ? ? ? 繼承是面向對象的三大特征之一

? ? ? ? ? ? ? ? 繼承是類與類之間關系的一種(是父類與子類的關系)

????????使用場景:

? ? ? ? ? ? ? ? 一個類與另一個類之間存在is a 的關系,這兩個類他們有相似的屬性和行為,那這個類就可以繼承另一個類。

? ? ? ? ? ? ? ? eg:例如,蛇繼承了爬行動物,爬行動物繼承了動物,我們就可以描述:蛇 is a 爬行動物,爬行動物是動物中的一種。

? ? ? ? 使用帶來的優點:

????????????????①提高代碼的復用性,子類繼承父類后,可以直接使用父類中非私有的屬性與方法

????????????????②提高了代碼的可維護性,只要修改父類,子類就可以全部生效

????????????????③提高了代碼的可拓展性,子類繼承父類,在子類中定義自己特有的方法,拓展功能

????????????????④是多態的前提

? ? ? ? 缺點:

????????????????①繼承讓代碼與代碼之間有了關系,耦合度上升

????????????????②父親修改后,子類不得不跟著變化,削弱了子類的獨立性,降低了代碼的靈活性

(2)繼承的實現與特點:
? ? ? ? 實現:

? ? ? ? ? ? ? ? ?①使用extends關鍵字

? ? ? ? ? ? ? ? ?②格式:[ public ] class 子類名 extends 父類名{

????????????????????????????????}

? ? ? ? ? ? ? ? ?③相關名詞:父類又稱基類,超類;子類又稱泛生類。

案例展示:

//定義Person類,作為父類
class Person {private String name;public void setName(String name) {this.name = name;}public void sayHello() {System.out.println("hello~ I am " + name);}
}//定義Student類,作為子類繼承Person
class Student extends Person {// 新增內容可以為空
}//測試類
public class Test{// 測試代碼public static void main(String[] args) {// 實例化一個子類對象Student stu = new Student();// setName方法從父類中繼承而來stu.setName("tom");// sayHello方法從父類中繼承而來stu.sayHello();}
}
? ? ? ? 特點:

? ? ? ? Java只支持單繼承,不支持多繼承。即一個類只能繼承一個類,不能同時繼承兩個父類。

? ? ? ? Java支持多層繼承,即a類繼承b類,b類繼承c類。

? ? ? ? 如果一個類沒有顯式繼承另外一個類,則默認繼承Object類

補充:1、Java支持多實現,即一個類可以實現多個接口;

? ? ? ? ? ?2、Object類(這里簡單介紹方法的作用,至于具體用法,大家可以適當拓展)

clone():

? ? ? ? 有返回值,是Object類型

? ? ? ? 不會改變原對象

? ? ? ? 用處:創建該對象的一個副本,并返回

----------------------------------------------------------

equals():

? ? ? ? 有返回值,為boolean型

? ? ? ? 不會改變原對象

? ? ? ? 用處:用于判斷兩個對象是否相等,其實比較的是兩個對象的引用地址值,想要對內容進行比較,需要重寫方法

-----------------------------------------------------------

getClass():

? ? ? ? 有返回值,返回此對象的運行時類名

? ? ? ? 不會改變原對象

? ? ? ? 用處:返回對象的運行時類

-----------------------------------------------------------

hashCode():

? ? ? ? 有返回值,返回int型

? ? ? ? 不會改變原對象

? ? ? ? 用處:返回對象的哈希碼,幫助在哈希表中快速定位對象的位置。默認實現是根據對象的引用地址計算哈希碼

-----------------------------------------------------------

toString():

? ? ? ? 有返回值,為String類型

? ? ? ? 不會改變原對象

? ? ? ? 用處:返回對象的字符串表示形式,默認實現形式為:類名@哈希碼的十六進制

? ? ? ? 注意事項:

? ? ? ? 子類只能繼承父類所有的非私有的成員

(private不能直接使用子類,如果父類中有共有的方法控制這個屬性,那子類可以控制。)

案例展示,增加理解:

父類Animal.java

//提供父類
public class Animal {//成員一個私有,一個公有private String color;public int age;//提供get|set方法public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getAge() {System.out.println("in Animal getAge() ...");return age;}public void setAge(int age) {this.age = age;}
}

子類Dog.java

//定義Dog子類 繼承 Animal
public class Dog extends Animal {// 父類中的private成員,子類中不可以直接操作(無直接訪問權限)// Animal: private String color;// 父類中的非private成員,子類中可以直接操作// Animal: public int age;// 子類新增屬性private String name;// 子類新增get|set方法public void setName(String name) {this.name = name;}public String getName() {return name;}// 子類新增方法:輸出子類對象所有屬性(含新增屬性、從父類繼承)public void disp() {// 子類方法中 不能直接操作 父類private成員// System.out.println("繼承 color: " + color); error// 子類方法中 可以間接操作(借助public的get|set) 父類private成員System.out.println("繼承 color: " + getColor());// 子類方法中 可以直接操作 父類非private成員System.out.println("繼承 age: " + age);System.out.print("新增:" + name);}
}

測試類:

public class Test0204_AccessMember {public static void main(String[] args) {Animal a = new Animal();a.setColor("black");a.setAge(3);a.show();System.out.println("------------");Dog d = new Dog();//子類對象調用從父類繼承的public方法d.setColor("yellow");d.setAge(2);//子類對象調用新增的方法d.setName("虎子");d.disp();}
}
? ? ? ? 內存結構:

(3)super關鍵字:
????????定義:

? ? ? ? ? ? ? ? 與this相似,this表示自己;super表示父類,可以理解為父類對象的引用

????????變量訪問優先級:

????????????????1. 先在子類局部范圍中找局部變量? ? ??

????????????????2. 再在子類新增的范圍中查找

????????????????3. 最后從父類繼承的成員范圍中查找

(4)構造方法的繼承:
? ? ? ? 用處:

? ? ? ? ? ? ? ? 子類對象初始化,要借助父類的構造方法,對父類部分成員進行初始化

????????注意:

? ? ? ? ? ? ? ? 子類構造方法使用前,會優先找到父類的構造方法調用,默認調用父類的無參構造,對父類繼承部分成員進行初始化,父類初始化后,在調用子類的構造代碼。

? ? ? ? ? ? ? ? 子類可以通過super(參數),顯式調用父類的構造器,但注意必須放在構造方法中的第一行,注釋除外,由于this()也要放在第一行,因此他們不能同時使用

? ? ? ? ? ? ? ? ?顯式調用父類的構造器后,就不會再默認調用父類的無參構造了

? ? ? ? ? ? ? ? ?顯式調用的父類的構造方法,父類中必須定義了

(5)靜態成員(屬性與方法)的繼承:

? ? ? ? 子類可以繼承父類的靜態成員,但不能重寫

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

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

相關文章

QGIS綠色版吉林一號切片體驗版插件(Jilin1Tiles)更新

吉林一號更新2024年圖源了但吉林一號切片體驗版插件(Jilin1Tiles)還沒有更新,我修改了一下代碼,直接集成到QGIS綠色版中。如下:注意:第一次使用的時候需要選中啟用一下插件:需要使用的可以直接下…

git操作命令和golang編譯腳本

git子模塊信息處理命令git init submodule git submodule updategit取消合并 git merge --abort git reset --hard HEAD{1}bat文件生成二進制set GOOSlinux set GOARCHamd64 go env -w GOFLAGS-modvendor go build -ldflags "-w -s" -ohallapiset GOOSlinux set GOAR…

通往L4之路:構建自我進化的智能駕駛決策大腦

摘要: 本文旨在提出一個超越當前主流“感知-預測-規劃”分離式架構的下一代自動駕駛決策系統方案。面對自動駕駛領域最核心的“長尾場景”難題,本文借鑒并升華了一套源于復雜策略制定的決策智能框架,通過構建動態駕駛世界模型(Dyn…

AI編程助手:終結996的新希望

引言程序員工作現狀與“996”現象的普遍性AI技術快速發展對編程效率的潛在影響核心問題:AI IDE與AI輔助編程能否改變傳統開發模式AI IDE與AI輔助編程的核心技術AI IDE的定義與功能(代碼補全、錯誤檢測、自動重構等)AI輔助編程工具&#xff08…

Anthropic 禁止 OpenAI 訪問 Claude API:商業競爭與行業規范的沖突

Anthropic 禁止 OpenAI 訪問 Claude API:商業競爭與行業規范的沖突 文章來源:Poixe AI 本周,美國 AI 公司 Anthropic 宣布禁止 OpenAI 通過 API 訪問其 Claude 系列大模型。這一舉動引發了行業對"友好基準測試"與商業競爭邊界的熱…

區塊鏈 + 物聯網落地案例:供應鏈溯源系統開發全記錄

本文詳細記錄了區塊鏈與物聯網技術融合的供應鏈溯源系統開發全流程。從項目背景出發,闡述傳統供應鏈溯源痛點,介紹系統開發的技術架構設計,包括物聯網數據采集層、區塊鏈數據存儲層等核心模塊,詳解硬件選型、智能合約編寫、數據上…

Windows環境下Intel Fortran如何安裝配置NetCDF

NetCDF(Network Common Data Form)格式,簡稱nc格式,是一種自描述、與平臺無關的二進制數據文件,特別適合多維數據的存儲和交換,廣泛應用于氣象、海洋、地球科學等領域。本文介紹Windows環境下IntelFortran安裝配置NetCDF的過程。 一、系統環境及準備工作 1. 系統 Wind…

tcp/udp的socket特點

tcp : 綁定一個 socket 只是用來監聽,accept 對每個客戶端生成一個 socket 用來維護滑動窗口等。每個客戶端用一個 socket 用來維護滑動窗口等。 4 次揮手對應兩次 close 的 fin 和返回的 ack。 而三次揮手在 connect 里阻塞完成。 ?udp : 雙…

Linux命令top

top一、 命令二、 如何查看top輸出的結果一、 命令 top命令是Linux中的一個實時進程監控工具,類似于windows中的任務管理器。 基本命令 top二、 如何查看top輸出的結果 我們需要分析top輸出的結果 top輸出的結果分為上下兩部分,先看上半部分 第一行是…

Perl 數據庫連接

Perl 數據庫連接 概述 Perl是一種強大的編程語言,廣泛應用于文本處理、系統管理、網絡編程等領域。隨著數據庫技術的快速發展,Perl與數據庫的結合也日益緊密。本文將詳細介紹Perl數據庫連接的相關知識,包括常用的數據庫類型、連接方法以及一些…

jenkins從入門到精通-P1—九五小龐

1. jenkins的兩個核心為CI持續集成 CD持續部署2.jenkins在企業工作中的流程3. 學習的內容包括

第九節 Redis 事務、Redis 腳本

Redis 事務可以一次執行多個命令, 并且帶有以下兩個重要的保證: 事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。事務是一個原子操作&#x…

托福閱讀37-2

托福閱讀37-2 1.reinforcement from reintroduction定位到倒數第二句,這里我沒看懂former和term,直接懵掉了,然后往后看。這句話其實省略了,補充完應該是The former is termed reintroduction and the latter is termed reinforce…

docker-compose一鍵部署Springboot+Vue前后端分離項目

1. 背景說明 后端使用JDK8,前端為普通Vue項目前端訪問后端接口,統一帶了前綴/api 2. 項目配置 2.1 后端 yml文件里配置統一訪問前綴/api2.2 前端 API路徑配置為相對路徑:說明:我這邊前后端應用都是部署在同一臺服務器上&#xff0…

Unity_數據持久化_XML基礎

Unity數據持久化 三、XML數據持久化 3.1 XML基礎概念 3.1.1 什么是XML XML(eXtensible Markup Language)**是一種可擴展的標記語言,用于存儲和傳輸數據。它具有以下特點: 結構化:數據以層次結構組織可讀性:…

大語言模型的解碼策略:貪婪解碼與波束搜索

在自然語言生成任務(如機器翻譯、文本摘要、圖像描述等)中,語言模型通常會輸出一個詞的概率分布,但模型本身并不會自動告訴你應該選哪些詞作為最終的輸出句子。因此,我們需要設計一個“解碼策略”來從這些概率中生成可…

智慧園區:中小企業的 “減壓閥” 與數字化招商革命

在當前的經濟環境下,中小企業的生存發展面臨著諸多挑戰,其中選址成本儼然成為了創業路上的 “第一道坎”。傳統招商模式中,信息不對稱的問題尤為突出,初創企業常常因此陷入選址失誤的困境。有的企業選在交通不便的地方&#xff0c…

從零開始配置pytorch環境

總結了一下幾篇熱門文章和自己的經驗,方便以后換設備配置環境 一、安裝Anaconda 這一步是為了不污染全局環境,很有必要。 直接清華源鏡像下載:Index of /anaconda/archive/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror 根據自…

離線錄像文件視頻AI分析解決方案

前言 在安防領域,視頻的價值不言而喻,尤其是錄像文件的價值顯得更是尤為重要。在一個安防項目上視頻錄像一般存儲1個月、3個月甚至更長時間,這就形成了海量的離線錄像文件數據。傳統安防項目對錄像文件的處理還有一定的局限性: 事…

人工智能與金融:金融服務的重塑

1. AI 驅動金融變革:從 “標準化” 到 “智能化”1.1 傳統金融的痛點與 AI 的破局傳統金融行業長期面臨三大瓶頸:服務效率低下:銀行柜臺辦理一筆貸款需 3-5 個工作日,人工審核流程繁瑣,客戶等待時間長;風險…