day10_oop

今日內容

零、 復習昨日
一、作業
二、繼承
三、重寫
四、this和super
五、訪問修飾符

零、 復習昨日

數組創建的兩種方式

  • new int[3];
  • new int[]{值,值2,…}
  • 存值: 數組名[下標] = 值

構造方法什么作用?有參無參構造什么區別?

  • 創建對象
  • 無參創建出的對象屬性是默認值
  • 有參創建出的對象屬性是指定值

創建對象的過程:

  • new 調用構造方法
  • 先屬性初始化,后再執行構造方法內代碼

this是什么,什么作用?

  • this指代當前類的對象
  • this.屬性; this.方法(); this();
  • this(); 調用自己的無參構造
  • this(參數); 調用自己有參構造

解釋重載(Overload)

  • 方法名一樣,參數列表不一樣
  • 與返回值無關

類封裝的步驟

  • 屬性私有private,提供set get方法

public class Square{int l;public Square(){this(1);}public Square(int l){this.l = l;}
}

一、作業

3.創建類

創建老師類
創建學生類
老師帶了很多學生
把學生存倒數組中 Student[] stus = new Student[3];

// 學生類

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc*/
public class Student {private int age;private String name;public Student() {}public Student(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

// 老師類

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 老師類*/
public class Teacher {private int age;private String name;// 在老師類定義屬性存儲多個學生private Student[] stuArr;public Teacher() {}public Teacher(int age, String name) {this.age = age;this.name = name;}public Teacher(int age, String name, Student[] stuArr) {this.age = age;this.name = name;this.stuArr = stuArr;}public Student[] getStuArr() {return stuArr;}public void setStuArr(Student[] stuArr) {this.stuArr = stuArr;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

// 測試空指針異常

 // 演示空指針public static void test() {// 創建老師Teacher teacher = new Teacher(40,"老王");/*** 這里會報空指針異常,即空對象錯誤* 是因為stuArr1數組本身 為空,因為老師對象中根本就沒有數組*/// Student[] stuArr1 = teacher.getStuArr( );// stuArr1[0].getAge();// 創建數組賦值給老師的數組屬性Student[] stuArr = new Student[3];teacher.setStuArr(stuArr);/*** 這里也會報空指針異常,即空對象錯誤* 這里數組確實存在了,但是數組中存儲的是null* 即取出來stuArr2[0]這個null* null.getAge(),所以就報空指針*/Student[] stuArr2 = teacher.getStuArr( );stuArr2[0].getAge();}

image-20240301094923235

// 測試給老師存儲學生數組

public static void main(String[] args) {// 創建老師Teacher teacher = new Teacher(40,"老王");// 創建學生Student s1 = new Student(18, "小王");Student s2 = new Student(19, "小李");Student s3 = new Student(20, "小趙");// 創建數組,存學生Student[] stus = new Student[3];stus[0] = s1;stus[1] = s2;stus[2] = s3;// 將數組交給老師teacher.setStuArr(stus);// 從老師中取出學生,查看效果Student[] stuArr = teacher.getStuArr( );for (int i = 0; i < stuArr.length; i++) {String name = stuArr[i].getName( );int age = stuArr[i].getAge( );System.out.println("學生姓名:"+name+",學生年齡"+age );}}

二、繼承[重點]

2.1 繼承

生活中繼承: 子繼承父的財產

代碼中繼承: 子類繼承父類,使用父類屬性和方法

為什么需要繼承:

  • 減少代碼重復
  • 是形成多態的前提

語法:

public class Aextends B{}
A類是子類,B類是父類

要求: java中類的繼承只能是單繼承!!! 類只能繼承一個類!!!

// 演示: 父類Animal

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 父類Animal*/
public class Animal {int age;String name;void eat(){System.out.println("吃" );}
}

// 狗類Dog

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 狗類繼承動物類* 狗類是子類* 動物類是父類*/
public class Dog extends Animal{// 繼承
}

// 測試

public class TestExtends {public static void main(String[] args) {Dog dog = new Dog( );// Dog類繼承Animal類,就可以父類屬性和方法dog.name = "大黃";dog.eat();// Cat類繼承Animal類,就可以父類屬性和方法Cat cat = new Cat( );cat.age = 2;cat.eat();}
}

2.2 繼承中屬性

子類繼承父類,就可以使用父類屬性

image-20240301105010774

如果給父類設置私有屬性,子類就無法使用父類的屬性

image-20240301105216634

假如子類和父類中有重名的屬性,子類默認使用自己

  • ps: 一般情況下不會重復定義

image-20240301105522775

2.3 繼承中方法

繼承中,子類可以使用父類非私有方法

image-20240301105640157

繼承中,子類 調用父類私有方法

image-20240301105734266

子類中有與父類一樣的方法,默認調用自己的

  • 這就是重寫!!! 很重要!!! (多態的前提)
  • 跳轉第三章詳細了解重寫…

image-20240301110043902

2.4 繼承中構造方法

在Animal類定義無參構造,里面有輸出語句

在Dog類定義無參構造,里面有輸出語句

在Test測試類中創建Dog對象,結果

Animal()
Dog()

結論: 創建子類對象時**,先創建父類對象再創建子類對象**

image-20240301145023315

這個結果其實是因為在每個類的每個構造方法內有個**super()**,一般super()默認是隱藏的,

super是指代父類對象,super()是在調用父類無參構造,所以調用子類構造創建對象時先執行了父類構造創建了父類對象

image-20240301145647138

詳細的關于this和super的知識,看第四章

三、重寫(Override)

重寫,也可以叫做覆寫,它是發生在繼承中,子類重寫父類方法,有要求

  • 訪問修飾符一致
  • 返回值類型一致
  • 方法名一致
  • 參數列表一致

image-20240301110909236

為什么需要重寫?

  • 原因1:父類的方法子類能用但是不好用不適合子類!重寫后子類執行自己的方法
  • 原因2:重寫也是多態的前提

四、this和super

thissuper
是什么指代當前類對象父類對象
調用屬性this.屬性 (調用自己/父類屬性)super.屬性(只能調用父類)
調用方法this.方法(調用自己/父類方法)super.方法(只能調用父類)
構造方法this()/this(參數)只能調用自己構造方法super()/super(參數)調用父類構造方法

注意調用構造方法的語句,必須放在構造方法內,且放在第一行

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 狗類繼承動物類* 狗類是子類* 動物類是父類*/
public class Dog extends Animal{// int age;String name = "二哈";// 無參構造public Dog(){System.out.println("Dog()" );}/*** 這是注解,告訴編譯器此處是重寫* 就得重寫的規范*/@Overridevoid eat() {System.out.println("狗吃骨頭" );}/*** 演示this和super*/public void show() {// 調用自己或父類屬性nameSystem.out.println(this.name );// 只能調用父類屬性nameSystem.out.println(super.name );this.eat();//調用自己/父類方法super.eat();//調用父類方法}
}

五、練習

pdf6

六、訪問修飾符

訪問修飾符,訪問限定符,訪問控制符,其實限制屬性/方法能不能被訪問到,即能不能被調用

當前類中當前包其他類中其他包子類其他包非子類
public
protected×
缺省(默認)××
private×××

訪問修飾符,訪問限定符,訪問控制符,其實限制屬性/方法能不能被訪問到,即能不能被調用

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

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

相關文章

【力扣白嫖日記】602.好友申請II:誰有最多的好友

前言 練習sql語句&#xff0c;所有題目來自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免費數據庫練習題。 今日題目&#xff1a; 602.好友申請II&#xff1a;誰有最多的好友 表&#xff1a;RequestAccepted 列名類型requester_idintaccept…

外賣店優先級

題目描述 ”飽了么”外賣系統中維護著N 家外賣店&#xff0c;編號1~N。每家外賣店都有一個優先級&#xff0c;初始時(0時刻)優先級都為0。 每經過1個時間單位&#xff0c;如果外賣店沒有訂單&#xff0c;則優先級會減少1&#xff0c;最低減到0;而如果外賣店有訂單&#xff0c;則…

【AIGC】微笑的秘密花園:紅玫瑰與少女的美好相遇

在這個迷人的畫面中&#xff0c;我們目睹了一個迷人的時刻&#xff0c;女子則擁有一頭柔順亮麗的秀發&#xff0c;明亮的眼睛如同星河般璀璨&#xff0c;優雅而靈動&#xff0c;她的微笑如春日暖陽&#xff0c;溫暖而又迷人。站在紅玫瑰花瓣的驚人洪水中。 在一片湛藍無云的晴…

Liberod的License申請

Liberod的License申請 找到license申請的路徑 查找C盤的磁盤序列號 鍵盤的win+R,輸入cmd 輸入vol,然后回車 圖中的DiskID就是填寫你C盤序列號的位置,填寫完成后點擊Register,幾秒鐘后會提示你,預計45分鐘后會發送到你的郵箱

docker-mysql:5.7安裝

1、下載mysql:5.7鏡像 [rootlocalhost ~]# docker search mysql (某個XXX鏡像名字) [rootlocalhost ~]# docker pull mysql:5.7 按裝之前查看一下是否按裝過mysql。如果安裝過會占用3306端口。 [rootlocalhost ~]# ps -ef | grep mysql 2、安裝 # -d&#xff1a;后臺運行 #…

C語言基礎(五)——結構體與C++引用

七、結構體與C引用 7.1 結構體的定義、初始化、結構體數組 C 語言提供結構體來管理不同類型的數據組合。通過將不同類型的數據組合成一個整體&#xff0c;方便引用 例如&#xff0c;一名學生有學號、姓 名、性別、年齡、地址等屬性&#xff0c;如果針對學生的學號、姓名、年齡…

MJ V7 在 V6 Beta 發布后即將推出,即將到來的人工智能 API 訪問!

讓我們深入了解 MidJourney 的新功能 在發布官方 Beta 之前總結 V6 Alpha 隨著 MidJourney V6 Alpha 上周成為默認版本&#xff0c;該團隊現在正在努力在過渡到官方 Beta 版本之前進行進一步的改進&#xff1a; 一組 3 個視覺一致性功能 1 — 升級的“風格參考”功能 這將是…

團體程序設計天梯賽 L2-003 月餅(多重背包模板)

L2-003 月餅 分數 25 月餅是中國人在中秋佳節時吃的一種傳統食品&#xff0c;不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量&#xff0c;請你計算可以獲得的最大收益是多少。 注意&#xff1a;銷售時允許取出一部分庫存。樣例給…

pytorch基礎1-pytorch介紹與張量操作

專題鏈接&#xff1a;https://blog.csdn.net/qq_33345365/category_12591348.html 本教程翻譯自微軟教程&#xff1a;https://learn.microsoft.com/en-us/training/paths/pytorch-fundamentals/ 初次編輯&#xff1a;2024/3/1&#xff1b;最后編輯&#xff1a;2024/3/1 這是本…

高中數學:分式函數值域的求法

一、求值域的兩種基本思路 1、根據函數圖像和定義域求出值域。 難點&#xff1a;畫出函數圖像 2、研究函數單調性和定義域求出值域。 二、函數圖像畫法 高中所學的分式函數&#xff0c;基本由反比例函數平移得到。 復雜分式函數圖像畫法的兩個要點&#xff1a; a、找垂直、…

mysql 常用命令練習

管理表格從表中查詢數據從多個表查詢修改數據sql變量類型 管理表格 創建一個包含三列的新表 CREATE TABLE products (id INT,name VARCHAR(255) NOT NULL,price INT DEFAULT 0,PRIMARY KEY(id) // 自增 ); 從數據庫中刪除表 DROP TABLE product; 向表中添加新列 ALTER TAB…

如何優化阿里云幻獸帕魯/Palworld的多人聯機性能,并避免內存溢出導致的異常退出游戲?

優化阿里云幻獸帕魯/Palworld的多人聯機性能并避免內存溢出導致的異常退出游戲&#xff0c;可以采取以下幾種方法&#xff1a; 選擇合適的內存配置&#xff1a;由于幻獸帕魯是一個對內存需求較高的游戲&#xff0c;建議選擇至少16GB的內存。對于不同的玩家數量&#xff0c;可以…

【ArcGIS】漁網分割提取柵格圖+網格化分析圖繪制

ArcGIS按漁網分割提取柵格圖并繪制網格化分析圖 準備數據操作步驟步驟1&#xff1a;創建漁網&#xff08;Create Fishnet&#xff09;步驟2&#xff1a;柵格數據處理步驟3&#xff1a;柵格插值步驟4&#xff1a;數據關聯 參考 網格化的目的是讓各個數據更加標準化的進行統計。因…

GO常量指針

Go語言中的常量使用關鍵字const定義&#xff0c;用于存儲不會改變的數據&#xff0c;常量是在編譯時被創建的&#xff0c;即使定義在函數內部也是如此&#xff0c;并且只能是布爾型、數字型&#xff08;整數型、浮點型和復數&#xff09;和字符串型。 由于編譯時的限制&#x…

自動化測試系列 —— UI自動化測試!

UI 測試是一種測試類型&#xff0c;也稱為用戶界面測試&#xff0c;通過該測試&#xff0c;我們檢查應用程序的界面是否工作正常或是否存在任何妨礙用戶行為且不符合書面規格的 BUG。了解用戶將如何在用戶和網站之間進行交互以執行 UI 測試至關重要&#xff0c;通過執行 UI 測試…

Maven 插件之 maven-enforcer-plugin 解決沖突重復依賴

目錄 0、前言1、enforcer 是什么2、能干什么3、怎么用4、規則5、擴展規則6、使用7、banDuplicateClasses8、banDuplicatePomDependencyVersions 0、前言 maven 項目種經常出現 jar 包沖突、重復依賴、無效引用怎么辦&#xff0c;maven-enforcer-plugin 了解一下 1、enforcer …

《AI紀元:幻域探險》

游戲項目名稱&#xff1a;《AI紀元&#xff1a;幻域探險》 游戲類型&#xff1a;AI驅動的角色扮演探險游戲&#xff08;RPG&#xff09; 背景設定&#xff1a; 《AI紀元&#xff1a;幻域探險》設定在一個名為“幻域”的廣闊虛擬世界。這個世界由高度發達的AI技術支持&#xff0…

SpringCloud-同步異步通訊比較

本文詳細探討了同步通訊和異步通訊在信息傳遞中的區別&#xff0c;以及它們分別帶來的優勢和不足。通過對支付流程的案例分析&#xff0c;突顯了同步通訊可能面臨的阻塞和服務依賴問題&#xff0c;而異步通訊通過引入事件驅動模式和消息代理&#xff08;Broker&#xff09;成功…

SQL Server 開發環境配置教程(SSMS+SQL Prompt)

背景 記錄一下 SQL Server 常用開發軟件 體驗了各種數據庫IDE(DBeaver、Navicat、DataGrip)之后綜合下來還是感覺 SSMSSQL Prompt 對于 SQL Server 最好用&#xff0c;所以在此記錄一下配置過程 數據庫可視化管理工具SSMS 官方下載地址&#xff1a; https://learn.microsoft…

Java基礎數據結構之棧

一.什么是棧 棧是一種特殊的線性表&#xff0c;它只允許在固定的一端進行元素的添加與使用&#xff0c;且遵循先進后出的原則。添加取用元素的一端稱為棧頂&#xff0c;另一端稱為棧底。出棧和入棧都是操作棧頂元素 二.棧的模擬實現 棧的底層是一個數組 這是里面的成員變量以…