Java笔记03-Constructor Override
Java筆記03-Constructor & Override
構(gòu)造方法基本概念
構(gòu)造方法是類中的一種特殊方法
它是在類創(chuàng)建對象(實(shí)例化)的時(shí)候自動調(diào)用的方法
這個(gè)和python中的__init__初始化魔術(shù)方法類似
可以在創(chuàng)建對象的時(shí)候進(jìn)行參數(shù)的傳遞
默認(rèn)送您的構(gòu)造
一個(gè)類編譯過后都需要有一個(gè)構(gòu)造方法.如果程序中沒有寫的話
編譯器在編譯時(shí)就會幫你加上一個(gè)無參數(shù)的空的構(gòu)造方法(稱之為"默認(rèn)的構(gòu)造方法")
那要是你定義了構(gòu)造方法了,編譯器也不欠欠的幫你加了,它也懶
關(guān)于構(gòu)造的建議
-
當(dāng)類中有成員變量,并且還不是常量的時(shí)候,建議提供兩個(gè)版本的構(gòu)造方法,一個(gè)無參數(shù)的構(gòu)造,一個(gè)全屬性的構(gòu)造
-
而類中所有成員變量都是常量或者干脆就沒有成員變量的時(shí)候,建議不要寫構(gòu)造
成員方法重載
說白了就是同樣名稱的方法,可以有很多不同參數(shù)列表的版本,有的有參數(shù),有的沒有參數(shù),而方法名一樣
這樣官方說能讓類的設(shè)計(jì)變的更加優(yōu)雅,我是沒看出來
好像是能夠一個(gè)方法處理不同的數(shù)據(jù)
這樣的設(shè)計(jì)方式成為重載設(shè)計(jì)
this關(guān)鍵字
this就是代表對象本身(調(diào)用該方法的對象)
就像JavaScript中的this
就像python中的self
OOP三大特性之封裝
封裝的面向?qū)ο蟮娜筇匦灾?
如果代碼不做限制,則很多屬性值是無效的
封裝就是保證屬性值有效的技術(shù)
封裝的步驟
屬性(不是常量的)必須使用private修飾,確保外部變量無法直接進(jìn)行賦值操作
提供操作屬性的方法,一般都是讀寫屬性方法,get屬性和set屬性方法
構(gòu)造方法中,也要通過調(diào)用set和get方法來操作
static關(guān)鍵字
靜態(tài)static關(guān)鍵字修飾屬性或者方法
可以將對象層級從對象級升級成為類級別,在類加載的時(shí)候就可以調(diào)用準(zhǔn)備好的屬性或者方法
換句話說就是static修飾的可以直接進(jìn)行調(diào)用
單例設(shè)計(jì)模式
設(shè)計(jì)模式是形成標(biāo)準(zhǔn)化流程的經(jīng)驗(yàn)總結(jié),是特定問題的固定的解決方案
單例設(shè)計(jì)思路:
1. 先private構(gòu)造,阻止外部去創(chuàng)建對象 2. 本類提供一個(gè)對象,定義一個(gè)private static 的本類類型的屬性 3. 對外提供get方法,將唯一的對象返回到外部單例分為餓漢式和懶漢式兩種寫法
java中單例模式是一種常見的設(shè)計(jì)模式,在實(shí)際開發(fā)中比較常用
具體詳細(xì)內(nèi)容可以參考:Java設(shè)計(jì)模式之單例模式
OOP三大特性之繼承
繼承就是子類復(fù)用父類的代碼
使用關(guān)鍵字extends表示類和類之間的繼承關(guān)系
class Son extends Father{// ... }Java中不能多繼承,可以通過接口的多實(shí)現(xiàn)來彌補(bǔ)類的多繼承
繼承中的構(gòu)造方法
子類必須通過super();關(guān)鍵字才能調(diào)用父類中的構(gòu)造方法
這樣才能好好的初始化來自父類的成員變量
this()和super()必須出現(xiàn)在構(gòu)造的第一行,因此不可能同時(shí)出現(xiàn)
方法的重寫
- 有些父類寫好的方法,子類它不太喜歡
子類就可以使用方法重寫(覆蓋)來改變他爸爸給他的方法
- 方法重寫的原則:
- 在子類重寫的方法中,可以通過super關(guān)鍵字調(diào)用父類的"原始"方法.
- static 方法重寫之后還是static的
OOP三大特性之多態(tài)
一母生九子,九子各不同
Person p = new Student();原因:
編譯時(shí),p被認(rèn)為是Person類型;但在運(yùn)行時(shí)是Student類型.在內(nèi)存中其實(shí)是子類對象.
總結(jié):
左父右子即為多態(tài)
多態(tài)特點(diǎn)
多態(tài)時(shí),如果想要把擴(kuò)展的屬性和方法調(diào)用出來,需要做類型轉(zhuǎn)換
父類轉(zhuǎn)子類需要做強(qiáng)制類型轉(zhuǎn)換(向下轉(zhuǎn)型)
子類轉(zhuǎn)父類需要做強(qiáng)制類型轉(zhuǎn)換(向上轉(zhuǎn)型)
對象強(qiáng)制類型轉(zhuǎn)換是一種還原行為,必須內(nèi)存中是該類型的對象才能成功
instanceof運(yùn)算符
instanceof就是判斷對象的類型,如果是該類型返回true,不是返回false
語法格式:
對象 instanceof 類型 obj instanceof Object p instanceof Person嚴(yán)格的來說,在進(jìn)行對象的向下轉(zhuǎn)型之前,都得instanceof一下才能
這個(gè)instanceof必須發(fā)生在父子之間才行哦!
抽象類
用abstract修飾的類,這個(gè)類吧就厲害了
它不能實(shí)例化,這可咋用啊
唉,對 就是用來繼承的,你不能實(shí)例化你兒子行啊
抽象方法所在類必須是抽象類,而子類如果不是抽象類,一定要重寫父類中的抽象方法才行(實(shí)現(xiàn)父類的方法體)
總結(jié)
以上是生活随笔為你收集整理的Java笔记03-Constructor Override的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软易升级服务器,通过“微软Window
- 下一篇: 百度云文字识别OCR【表格】