繼承(使用及深入、super、重寫/復寫)--學習JavaEE的day14

day14

一、繼承

概念

Java中的繼承是一個對象獲取父對象的所有屬性和行為的機制

理解:繼承是指一個類(子類)可以繼承另一個類(父類)的屬性和方法

關鍵字extends

優點:減少代碼的冗余

缺點:繼承會增加類與類之間的關系,會增加代碼的維護難度

繼承的使用

使用場景:多個類似的類,有相同的屬性和方法,就可以把相同屬性和方法抽取到父類

需求:編寫中國人和日本人的類,創建各自的對象

分析:

人類:

屬性:姓名、性別、年齡

方法:吃飯飯、睡覺覺

中國人的類 繼承 人類 :

屬性:身份證

方法:打太極

日本人的類 繼承 人類:

屬性:年號

方法:拍電影

ps:(省略部分代碼)

public class Person {String name;
char sex;
int age;public void eat(){System.out.println(this.name + "吃飯飯");
}public void sleep(){System.out.println(this.name + "睡覺覺");
}}
//            子類           繼承        父類
public class Chinese extends Person{String id;public void playTaiJi(){System.out.println("中國人打太極");
}}
	//創建對象Chinese c = new Chinese();//操作父類屬性c.name = "奇男子";c.sex = '男';c.age = 22;System.out.println(c.name);System.out.println(c.sex);System.out.println(c.age);//操作子類屬性c.id = "1234567890";System.out.println(c.id);//調用父類方法c.eat();c.sleep();//調用子類方法c.playTaiJi();

繼承內存圖

繼承內存圖

super

理解:

super表示父類

作用:

1.super.屬性:在子類中,調用父類的非私有化的成員屬性

2.super.方法:在子類中,調用父類的非私有化的成員方法

3.super():在子類構造方法中的第一句調用父類的非私有化的構造方法

案例:

繼承的使用的需求案例

封裝父類,添加無參構造、有參構造、get、set方法(都由eclipse直接生成),成員方法保留

經驗

私有化屬性:eclipse工具欄 ------->Source------->Select getters and setters to create—>勾選需要生成屬性的get和set方法;

Source中還有一些自動生成,如構造方法等等;

子類繼承父類,封裝子類,super使用

public class Chinese extends Person{private String id;public Chinese() {
}public Chinese(String name, char sex, int age, String id) {super(name, sex, age);this.id = id;
}public String getId() {return id;
}public void setId(String id) {this.id = id;
}public void playTaiJi(){System.out.println(super.getName() + "打太極");
}}

測試類,有有參構造直接賦值,不用一個個賦值

	//創建對象Chinese c = new Chinese("奇男子", '男', 22, "1234567890");//調用父類方法c.eat();c.sleep();//調用子類方法c.playTaiJi();
小結

編寫一個類的步驟:

1.屬性

2.私有化屬性

3.無參構造

4.有參構造

5.get/set方法

6.其他的方法

深入繼承:

思考題:
  1. 創建子類對象,會不會調用父類構造方法?

  2. 創建子類對象,會不會創建父類對象?
    不會

  3. 創建子類對象,為什么會調用父類構造方法?
    目的是將父類的屬性存放在子類對象中(因為會在子類對象中開辟空間,用于存儲父類的成員屬性)

  4. 創建子類對象,先調用父類構造方法還是子類構造方法?
    先調用子類構造方法

  5. 創建子類對象,先完成父類構造方法還是子類構造方法?
    先完成父類構造方法

  6. 子類可以繼承父類私有化的屬性和方法嗎?

    ? 可以,但是只能間接調用

  7. 子類對象是否能繼承父類所有的屬性和方法?

    ? Java官網上,明確表示子類不能繼承父類私有化的屬性和方法,這是站在使用的角度

    ? 實際上,子類能繼承父類私有化的屬性方法,但是不能直接使用,可以在父類中編寫公有方法去調用私有的屬性和方法

案例:
public class Father {private String fatherAttr = "父類私有化屬性";public Father() {System.out.println("調用父類的構造方法");
}public String getFatherAttr() {return fatherAttr;
}public void setFatherAttr(String fatherAttr) {this.fatherAttr = fatherAttr;
}private void method01(){System.out.println("父類私有化方法");
}public void method02(){method01();
}}
public class Son extends Father{public Son() {//super();//默認實現:調用父類的構造方法System.out.println("調用子類的構造方法");
}}
public class Test01 {public static void main(String[] args) {	Son son = new Son();System.out.println(son.getFatherAttr());son.method02();
}}

重寫/復寫

含義:

重寫也叫做復寫,將父類中方法在子類中重新編寫一遍

應用場景:

父類方法不滿足子類需求時,子類就可以重復父類的方法

條件:

1.在子類中重寫父類的方法

2.返回值、方法名、參數列表必須跟父類重寫的方法一致

3.訪問修飾符不能比父類更嚴格

需求:

編寫中國人和日本人的類,創建各自的對象

public class Chinese extends Person{
//省略一部分//@Override -- 重寫的注解
//注解:給程序員和系統解釋代碼信息
@Override
public void eat(){System.out.println(super.getName() + "吃山珍海味");
}
//在測試類new對象調用輸出

總結

1.繼承的使用

2.繼承的深入 — 重要

3.super

4.重寫

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

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

相關文章

[Unity3d] 網絡開發基礎【個人復習筆記/有不足之處歡迎斧正/侵刪】

TCP/IP TCP/IP協議是一 系列規則(協議)的統稱,他們定義了消息在網絡間進行傳輸的規則 是供已連接互聯網的設備進行通信的通信規則 OSI模型只是一個基本概念,而TCP/IP協議是基于這個概念的具體實現 TCP和UDP協議 TCP:傳輸控制協議,面向連接&#xff0c…

VsCode配置PCL、Open3D自動補全

寫在前面 本文內容 在VsCode上開發PCL、Open3D相關代碼,代碼自動補全 Open3D、PCL的安裝使用見各個版本的Open3D、PCL的編譯、使用教程 平臺/環境 windows11(windows10): visual studio 2022;cmake 3.22; VsCode 通過cmake構建項目; 轉載請…

Excel MATCH函數 兩張順序不同表格,統一排序

目錄 一. 背景二. 添加輔助列,使用MATCH函數生成排序條件三. 效果 一. 背景 有如下圖所示的兩張表格,分別記錄著同一批人的1月份和2月份的工資。表格A和表格B中的姓名列相同,工資列數據不同現在要求參考表格A中的姓名列對表格B中的數據進行排序&#xf…

C語言:預處理

C語言:預處理 預定義符號#define定義常量定義宏宏與函數對比 #操作符##操作符條件編譯頭文件包含庫文件包含本地文件包含嵌套文件包含 預定義符號 C語?設置了?些預定義符號,可以直接使?,預定義符號也是在預處理期間處理的。 __FILE__ //…

多智能體強化學習簡介

基礎概念 什么是多智能體系統 多智能體系統(Multi-Agent System,MAS)是由多個自主智能體組成的系統。這些智能體可以協同工作,也可以獨立行動,以實現各自的目標。在多智能體系統中,每個智能體都有自己的決…

在你的 Vue + Electron 項目里,引入 ESLint

因為我的項目是基于 Electron 平臺的 Web 應用,使用 Vue 3 實現,而且用了 TypeScript,所以,在引入 ESLint 的時候,要考慮好幾種規范的問題。 文章目錄 零、簡介1. 規則2. 配置文件3. 共享配置4. 插件5. 解析器6. 自定義…

Vue開發實例(九)動態路由實現左側菜單導航

之前在【Vue開發實例(六)實現左側菜單導航】文中實現了菜單的導航,本篇是在那個基礎上改造的。 動態路由實現左側菜單導航 一、動態菜單創建二、根據菜單數據來創建路由三、添加路由已加載標記,省的每次點擊菜單都要加載 一、動態…

2021 年 3 月青少年軟編等考 C 語言一級真題解析

目錄 T1. 字符菱形思路分析 T2. 與圓相關的計算思路分析 T3. 蘋果和蟲子 2思路分析 T4. 奇數求和思路分析 T5. 藥房管理思路分析 T1. 字符菱形 給定一個字符,用它構造一個對角線長 5 5 5 個字符,傾斜放置的菱形。 時間限制:1 s 內存限制&a…

3、云原生安全之falco的部署

文章目錄 1、helm安裝2、拉去鏡像失敗與解決3、安裝faclo4、安裝nfs服務器,配置k8s的持久卷4.1、創建nfs服務器,4.2、部署master節點(nsf服務的客戶端)4.3、pv與pvc4.4、假設pv和pvc的配置文件出錯了5、安裝falcosidekick可視化(建議跳過,直接使用6)6、安裝faclo與falco…

【設計模式 01】單例模式

單例模式,是一種創建型設計模式,他的核心思想是保證一個類只有一個實例(即,在整個應用程序中,只存在該類的一個實例對象,而不是創建多個相同類型的對象),并提供一個全局訪問點來訪問…

java012 - Java集合基礎

1、集合基礎 1.1 集合概述 引用數據類型包括:類、接口、數組[] 1.2 ArrayList構造和添加方法 代碼: 空集合對象:[] add() add(int index,E element): 1.3 ArrayList集合常用方法

計算機體系結構安全:對體系結構如何支持安全機制進行調研

一、體系結構支持信任建立和主動防御的技術: 可信3.0 二、體系結構怎么更好的支持信任建立和主動防御 2.1 支持信任建立 一、以手機芯片舉例,用智能手機的芯片作為信任根,確保應用程序和敏感數據受到保護。 二、啟動時驗證操作系統和應用…

Stable Diffusion 模型分享:Henmix_Real(人像、真實、寫真、亞洲面孔)

本文收錄于《AI繪畫從入門到精通》專欄,專欄總目錄:點這里。 文章目錄 模型介紹生成案例案例一案例二案例三案例四案例五案例六案例七案例八下載地址模型介紹 作者述:這個模型試圖改

深入理解算法的空間復雜度

算法一&#xff1a;逐步遞增型 void Loveyou(int n)//n為問題規模 {int i1;while(i<n){i;printf("I love you %d\n",i);}printf("I love you more than %d\n",n);//5 } int main() {Loveyou(3000);return 0; } 無論問題規模怎么變&#xff0c;算法運行…

Springboot教程(五)——單元測試

idea中一般使用JUnit進行單元測試 基本使用 我們可以在idea的test文件夾下的XXXXApplicationTests內進行單元測試&#xff1a; 可以在Test標注的方法上寫測試代碼&#xff1a; SpringBootTest class C0101ApplicationTests {Testfun contextLoads() {println("Hello …

基礎二分學習筆記

模板 : 個人傾向第一種 ; 整數二分 : 最大化查找 : 可行區域在左側 : 查找最后一個<q的數的下標 : int find(int q){// 查找最后一個 < q 的下標 int l 0 , r n 1 ;while(l 1 < r){int mid l r >> 1 ;if(a[mid]<q) l mid ;else r mid ;}return…

django settings.py STATICFILES_FINDERS 設置

STATICFILES_FINDERS 定義查找器后端以確保Django能夠正確地定位和提供靜態文件是很重要的. Django中的STATICFILES FINDERS設置是一個inder后端列表&#xff0c;它知道如何在不同的位置定位靜態文件。 它被Django的靜態文件處理系統用來在開發和部署過程中查找和收集靜態文件…

js json轉換成字符串

js中JSON數據轉換成字符串&#xff0c;可以使用JSON.stringify()方法。 var obj {name: "張三", age: 18, gender: "男"}; var jsonString JSON.stringify(obj); console.log(jsonString); // 輸出 {"name":"張三","age"…

土壤類型數據

國家地球系統科學數據中心

AGM CPLD (AGRV2K )的時鐘(外部時鐘和片上內部振蕩器)

AGM CPLD &#xff08;AGRV2K &#xff09;的時鐘(外部時鐘和片上內部振蕩器) 外部晶振 與 內部振蕩器&#xff1a; mcu 和 cpld 聯合編程時&#xff0c; 整顆芯片需要一顆外部晶振。 &#xff08;芯片有內部振蕩器&#xff0c; 但誤差較大&#xff0c; 校準后 5%以內誤差&…