- 物件,是具體的事物,類,是對物件的抽象
- 方法的回顧及加深:
(1) 修飾符 回傳值 方法名(引數型別 引數名){方法體;return 回傳值;}
(2) Break可以跳出switch,結束回圈;return;可以結束方法
(3) 呼叫方法:a.靜態方法:類名.方法名();b.非靜態方法:物件.方法名()
(4) 靜態方法無法呼叫非靜態方法,因為靜態方法是和類一起加載的,依附于類;而非靜態方法是實體化后,即有物件產生后才存在,依附于物件
- 以類的方式組織代碼,以物件的方式封裝資料
- 類里只有兩個東西,一個是屬性,一個是方法,并且方法是用來改變屬性的
- IDEA中,在想輸出的東西后面加上.sout即可快速寫出System.out.println(...);
- 構造方法:
(1) 和類名相同,不需要寫回傳值
(2) 又名構造器,即使不寫構造器,也會存在一個默認的構造器,但是如果寫了一個構造器,之前默認的構造器會消失,為了子類考慮,任何父類必須有無參構造,也就是說一定要寫
(3) 創造物件必須用new,本質上就是在呼叫一個構造器
(4) 構造器是用來初始化屬性的
(5) IDEA中,alt+insert,再選擇constructor可以快速創建各種構造器
- 堆疊中存放方法和參考變數名,堆中存放具體物件和方法區(各種類(包含非靜態方法)和靜態方法)
- 參考型別:物件是通過參考來操作的,即用堆疊中的參考變數名操作堆中的具體資料
- 默認初始化:
(1) 數字:0,0.0
(2) Char:u0000
(3) Boolean:false
(4) 參考:null
- 封裝:
(1) 封裝是對于屬性而言的
(2) 屬性私有,修飾詞private
(3) 操作屬性用public的get/set方法(用第四步方法創建)
(4) IDEA中,alt+insert,再選擇getter and setter可以快速創建get/set方法
- 繼承:
(1) 子類繼承父類,extends意思是擴展:public class Student extends Person{}
(2) 修飾符是final的類無法被繼承
(3) 子類可以繼承父類的public的屬性和方法,私有的(private)無法被繼承
(4) IDEA中,ctrl + h可以打開類的繼承樹結構界面
(5) 所有的類都直接或者間接繼承object類
(6) Java中類只有單繼承,沒有多繼承,即只有一個父類
(7) 子類構造器假如沒有super(...),那么第一句默認執行父類無參構造器(如果父類沒有無參構造器則報錯),假如寫super(...),也要放在第一句,其中...是父類有參構造器的實參,也可以沒有,那就和默認的一樣,可以省略
① 不能在子類構造器中既寫this(),又寫super(),因為this中就有super,如果都寫了,那就是兩個super!
② Super既可以出現在子類的構造器中,也可以出現在子類的其他方法中
③ Super()可以理解為父類構造器,super可以理解為父類物件的參考,this是當前物件的參考
(8) 重寫都是方法的重寫(就是子類重寫父類方法,代碼表現為方法名相同,引數串列也相同,static靜態方法即使方法名相同,也不是重寫,重寫只針對非靜態方法,繼承過來然后覆寫,而static無法繼承,也就無法覆寫重寫),和屬性無關(假設A繼承了B)
① 父類參考B b可以指向子類物件new A(),假如是static靜態方法,方法呼叫只和左邊定義型別有關,假如是非靜態方法,子類重寫了父類方法,b呼叫方法先去子類里找
② 假如方法是private,final,state修飾的,那么都不能重寫
③ IDEA中,alt+insert,再選擇override method可以在子類中快速創建重寫方法
④ 修飾符:范圍可以擴大但不能縮小:public>protected>default>private
⑤ 拋出的例外:范圍可以縮小但不能擴大
⑥ 原因:父類方法無法滿足子類需求
- 多型:
(1) 是方法的多型,與屬性無關
(2) 一個物件的實際型別是確定的,但是指向他的參考可以有很多(比如父類參考指向子類物件)
(3) 物件能執行哪些方法,主要看左邊定義型別(父類參考指向子類物件)
① 子型別:能呼叫的方法都是自己的或者繼承過來的
② 父型別:能呼叫的方法都是父類的,假如子類重寫,那就呼叫重寫的,不能呼叫子類獨有的方法
(4) 子類轉化為父類(例如A a = new A();B b = a),可能會丟失自己本來的一些方法
- a Instanceof B是判斷a物件是否是B類或者B類子類的實體,是則回傳true
- 假如B b = new A();那么就可以強制裝換A a = (A)b;
- Static
(1) 靜態屬性屬于類,各個實體可以共享
(2) 每個方法都可以呼叫靜態和非靜態方法,但是靜態方法不能呼叫非靜態方法(因為靜態方法和類一起加載,此時非靜態方法還未出世,如何呼叫)
- 抽象類
(1) Abstract修飾類就是抽象類,修飾方法就是抽象方法
(2) 抽象類不能被new,只是對子類的約束,但是有構造方法,是給子類用的
(3) 抽象方法只有定義,沒有實作,是為了約束子類,假如子類不是抽象類就要實作所有抽象方法,否則子類也要定義為抽象類
(4) 有抽象方法的必須宣告為抽象類,抽象類里也可以有普通方法
(5) 作用:約束子類
(6) 局限:Java的類是單繼承,所以沒有介面的多繼承好用
- 介面
(1) 類是單繼承,介面是多繼承
(2) 關鍵字interface,類繼承介面用Z implements A,B,C...
(3) 比較
① 普通類:只有具體實作
② 抽象類:具體實作+規范(抽象方法)
③ 介面:只有規范(約束和實作分離的一種機制)
(4) 介面里的方法不需要也不能有實作,表現為不能有{}
(5) 方法默認修飾符public abstract,可以省略,所以可以簡寫為:回傳值 方法名(引數串列);常量默認修飾符public static final,可以簡寫為:資料型別 變數名 = 值(常量雖然可以定義,但很少使用)
(6) 類繼承了介面,就要實作介面中的方法
(7) IDEA中,alt+insert,再選擇implement method可以在繼承介面的類中快速創建介面里的方法
(8) 介面沒有構造方法
- 內部類:就是在一個類的內部再定義一個類,具體以后再聊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/4497.html
標籤:Java
