java基礎(day09)

目錄

1.繼承的作用

2.繼承樹

3.protected和super

protected

?super

注:super/this()--構造方法,第一行,一般不同時出現

4.向上向下轉型

向上轉型

向下轉型

?final

小結


1.繼承的作用

????????理解:首先就是可以實現代碼復用,比如當我們讓Student繼承Person時, Student 就獲得了Person的所有功能。只需要給Student編寫新的功能(關鍵字extends)。

代碼部分如下:

class Person {private String name;private int age;public String getName() {...}public void setName(String name) {...}public int getAge() {...}public void setAge(int age) {...}
}class Student extends Person {// 不要重復name和age字段/方法,// 只需要定義新增score字段/方法:private int score;public int getScore() { … }public void setScore(int score) { … }
}

注意:

????????OOP術語中我們把Person稱為 超類(super class),父類(parent class),基類(base class, Student稱為子類(sub class).

2.繼承樹

????????一般來說,java中,父類沒有明確寫繼承的類,編譯器會自動加上extends object,所有的類最終的都會指向ObjectObject沒有父類)。一個簡單的繼承樹如下圖所示:

┌───────────┐
│  Object   │
└───────────┘▲│
┌───────────┐
│  Person   │
└───────────┘▲│
┌───────────┐
│  Student  │
└───────────┘如果在定義一個Teacher類繼承Person類,繼承樹如下:┌───────────┐│  Object   │└───────────┘▲│┌───────────┐│  Person   │└───────────┘▲     ▲│     ││     │
┌───────────┐ ┌───────────┐
│  Student  │ │  Teacher  │
└───────────┘ └───────────┘

3.protected和super

protected

理解(protect): 由于繼承就是子類無法訪問父類的private字段或者private方法,

為了讓子類可以訪問父類的字段,我們需要把private改為protected。用protected修飾的字段可以被子類訪問:

class Person {protected String name;protected int age;
}class Student extends Person {public String hello() {return "Hello, " + name; // OK!}
}

protected關鍵字可以把字段和方法的訪問權限控制在繼承樹內部,一個protected字段和方法可以被其子類,以及子類的子類所訪問:

class Person {protected String name;protected int age;
}class Student extends Person {public String hello() {return "Hello, " + name; // OK!}
}
?super

super關鍵字表示父類(超類)。子類引用父類的字段時,可以用super.fieldName。

class Student extends Person {public String hello() {return "Hello, " + super.name;}
}
public class Main {public static void main(String[] args) {Student s = new Student("Xiao Ming", 12, 89);}
}class Person {protected String name;protected int age;public Person(String name, int age) {this.name = name;this.age = age;}
}class Student extends Person {protected int score;public Student(String name, int age, int score) {this.score = score;}
}

? ? ? ?在Java中,任何class的構造方法,第一行語句必須是調用父類的構造方法。如果沒有明確地調用父類的構造方法,編譯器會幫我們自動加一句super()。

class Student extends Person {protected int score;public Student(String name, int age, int score) {super(); // 自動調用父類的構造方法this.score = score;}
}

注:super/this()--構造方法,第一行,一般不同時出現

?

4.向上向下轉型

向上轉型
Student s = new Student();
Person p = new Person();
// 引用類型為Person的變量指向Student類型的實例
Person p = new Student(); 

?????????Student繼承自Person,因此,它擁有Person的全部功能。Person類型的變量,如果指向Student類型的實例,對它進行操作,是沒有問題的。這種把一個子類類型安全地變為父類類型的賦值,被稱為向上轉型(upcasting

注:可以把Student類型轉型為Person,或者更高層次的Object。

向下轉型

和向上轉型相反,如果把一個父類類型強制轉型為子類類型,就是向下轉型(downcasting

Person p1 = new Student(); // upcasting, ok
Person p2 = new Person();
Student s1 = (Student) p1; // ok
Student s2 = (Student) p2; // runtime error! ClassCastException!

?????????運行時,Person類型p1實際指向Student實例,Person類型變量p2實際指向Person實例。在向下轉型的時候,把p1轉型為Student會成功,因為p1確實指向Student實例,把p2轉型為Student會失敗,由于p2的實際類型是Person,不能把父類變為子類,因為子類功能比父類多,多出的功能無法憑空變出來。因此,向下轉型很可能會失敗。失敗的時候,Java虛擬機會報ClassCastException異常。

為了避免向下轉型出錯,Java提供了instanceof操作符,可以先判斷一個實例究竟是不是某種類型:

Person p = new Person();
System.out.println(p instanceof Person); // true
System.out.println(p instanceof Student); // falseStudent s = new Student();
System.out.println(s instanceof Person); // true
System.out.println(s instanceof Student); // trueStudent n = null;
System.out.println(n instanceof Student); // false

?instanceof實際上判斷一個變量所指向的實例是否是指定類型,或者這個類型的子類。如果一個引用變量為null,那么對任何instanceof的判斷都為false。利用instanceof,在向下轉型前可以先判斷:

Person p = new Student();
if (p instanceof Student) {// 只有判斷成功才會向下轉型:Student s = (Student) p; // 一定會成功
}

?final

  • // 類被final修飾,表示此類不能有子類,public final class Fu{
    
  • // final 修飾符基本數據類型變量-- 常量值不可變
    
  • // final 修飾符引用數據類型變量-- 地址不可變
    
  • // 當final修飾方法,表示此方法不能被重寫,但是final可被子類使用
    

小結

  • 繼承是面向對象編程的一種強大的代碼復用方式
  • Java只允許單繼承,所有類最終的根類是Object
  • 子類可以訪問訪問父類的publicprotected字段和方法
  • 子類的構造方法可以通過super()調用父類的構造方法
  • 當父類中不存在無參構造方法時,子類必須手動的調用父類的有參構造方法,并且必須在子類構造方法中的第一行
  • 可以安全地向上轉型為更抽象的類型
  • 向下轉型,可以使用instanceof運算符:用于判斷"引用指向的對象"是否是"指定類型",運算結果為boolean類型
  • 子類和父類的關系是ishas關系不能用繼承

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

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

相關文章

如何進行選擇。

初始理解問題 首先,我們需要明確題目在問什么。題目“House Robber”描述的是一個強盜在一排房屋前,每個房屋都有一定數量的錢。強盜不能連續搶劫兩個相鄰的房屋,否則會觸發警報。目標是搶劫到最多的錢。 動態規劃的思路 這個問題可以使用動態…

PHP語法高級篇(三):Cookie與會話

Cookie與會話在 Web 編程中十分實用:Cookie 能實現一周免登錄,還能記住用戶的主題偏好;會話可保存當前用戶信息,也能臨時存儲購物車數據。本篇文章將記錄Cookie與會話的學習過程。 一、Cookie cookie 常用于識別用戶。cookie 是服…

11. JVM中的分代回收

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

基于PaddleOCR的營業執照識別與數據分析系統

基于PaddleOCR的營業執照識別與數據分析系統 1. 項目概述 本項目旨在利用百度PaddleOCR技術識別營業執照圖片中的關鍵信息,結合自然語言處理(NLP)和卷積神經網絡(CNN)對OCR結果進行分類處理,最后對識別出的收入流水數據進行深度分析與可視化展示。系統將實現從圖像識別到數…

SpringBoot JSON字典序列化翻譯

🧩 一、效果預期 Data public class UserVO {private String status;DictTranslate(type "user_status")private String statusName; }最終返回 JSON: {"status": "1","statusName": "啟用" }&#…

基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一個WebUI自動化框架(5)失敗用例截圖與重試

在UI自動化測試用例執行過程中,經常會有很多不確定的因素導致用例執行失敗,比如網絡原因、環境問題等,所以我們有必要引入重試機制(失敗重跑),來提高測試用例執行穩定性。準備工作:我們在進行失…

【Oracle】centos7靜默安裝oracle19c

靜默安裝三步驟: 1、數據庫安裝db_install.rsp(數據庫軟件安裝響應文件)2、配置監聽netca.rap(監聽配置響應文件)3、建庫dbca.rsp(建庫響應文件)安裝oracle19c先決條件準備: 1.檢查主…

MCP基礎知識二(實戰通信方式之Streamable HTTP)

介紹 MCP 使用 JSON-RPC 2.0 作為其傳輸格式。傳輸層負責將 MCP 協議消息轉換為 JSON-RPC 格式進行傳輸,并將接收到的 JSON-RPC 消息轉換回 MCP 協議消息。其中SSE被廢棄了(Server-Sent Events (SSE) - Deprecated) SSE as a standalone tra…

量子計算與AI的融合:開啟智能革命的“量子躍遷”新范式

當量子計算的并行算力與人工智能的深度學習能力相遇,一場顛覆傳統認知的技術革命正在醞釀。從藥物研發到自動駕駛,從金融風控到氣候預測,兩者的融合不僅突破了經典計算的算力天花板,更催生出全新的算法范式與產業生態。本文將深入解析量子計算與AI融合的技術邏輯、核心突破…

【氮化鎵】不同偏壓應力下電荷俘獲效應導致的P-GaN HEMT閾值電壓不穩定性

2022年12月7日,意大利國家研究委員會微電子與微系統研究所的Giuseppe Greco等人在《Applied Physics Letters》期刊發表了題為《Threshold voltage instability by charge trapping effects in the gate region of p-GaN HEMTs》的文章,基于對p-GaN高電子遷移率晶體管(HEMTs…

ONLYOFFICE深度解鎖系列.10-如何識別圖像和PDF掃描件中的文本?用ONLYOFFICE的AI OCR輕松搞定!

ONLYOFFICE 文檔版本 9.0帶來多項 AI 關鍵改進,顯著提升您處理電子表格和 PDF 文件的工作效率。本指南將重點介紹新增的 OCR 功能,并講解如何在 PDF 編輯器中利用 AI 助手將圖像轉為可編輯文本。什么是 OCR 文字識別?OCR 技術能夠掃描各類文檔…

單例模式詳解:確保一個類只有一個實例

在軟件開發中,設計模式是解決常見問題的經典方案。單例模式(Singleton Pattern)作為創建型設計模式中最簡單也最常用的一種,確保一個類只有一個實例,并提供一個全局訪問點。本文將全面探討單例模式的概念、多種實現方式…

Appdynamic 配置 PostgreSQL 收集器

配置 PostgreSQL 收集器 您可以使用數據庫可見性監控任何版本的 PostgreSQL。 連接詳細信息 部分場地描述創建新的收集器數據庫類型您想要監控的數據庫類型。代理人管理收集器的數據庫代理。收藏家姓名您想要用來識別收集器的名稱。連接詳細信息主機名或 IP 地址運行數據庫的機…

其他常見 HTTP 方法

除了最常用的四種方法(GET、POST、PUT、DELETE),HTTP 協議還定義了一些較少使用但非常有用的請求方法,常用于調試、部分更新、跨域預檢等場景。1. HEAD 方法:獲取響應頭 特點: 用途:與 GET 類似…

Web應用防火墻(WAF)技術

目錄 一:簡介 1.1 Web安全現狀 1.2 傳統防御的局限性 二:Web應用防火墻技術解析 2.1 WAF核心架構 2.2 關鍵技術特性 三:WAF必要性 3.1 典型防護場景 3.2 與傳統方案對比 四:進階防護方案 4.1 智能WAF架構 4.2 關鍵技術…

機器學習之線性回歸(七)

機器學習之線性回歸(七) 文章目錄機器學習之線性回歸(七)一、線性回歸線性回歸超全指南:從“一條直線”到“正則化調參”的完整旅程0. 先對齊語言:標稱型 vs 連續型1. 問題形式化2. 損失函數全景3. 求解方法…

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的用戶價值引導與核心用戶沉淀策略研究

摘要:在數字化商業生態中,用戶留存與核心用戶培育是產品成功的關鍵。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序源碼的協同應用,探討如何通過技術賦能實現用戶價值引導與核心用戶沉淀。研究結合工業品供應鏈、美妝品牌、健康食品行業…

課題申報書成功率提升85%!借助大模型AI精準選題、搭綜述框架及提煉創新點(附實操AI提示詞)

大家好,感謝關注。我是七哥,一個在高校里不務正業,折騰用大模型AI實操的學術人。可以添加七哥(qige500)交流學術寫作或ChatGPT、Claude等學術大模型AI領域相關問題,多多交流,相互成就,共同進步。 寫一份高質量的課題申報書往往面臨許多困難,對很多同仁來說,難就難在…

Spring之【寫一個簡單的IOC容器EasySpring】

目錄 EasySpring 注解 EasyAutowired EasyComponent EasyComponentScan EasyLazy EasyPostConstruct EasyProtoType EasyValue Bean定義信息 EasyBeanDefinition 管理Bean定義信息 EasyBeanDefinitionRegister Aware EasyAware EasyBeanFactoryAware EasyBea…

Selenium動態網頁爬蟲編寫與解釋

使用Selenium來抓取動態網頁。動態網頁通常是指那些通過JavaScript動態加載內容的網頁,這些內容在初始HTML中并不存在,因此使用傳統的requests庫無法獲取到這些動態生成的內容。Selenium可以模擬瀏覽器行為,等待JavaScript執行并渲染頁面&…