大綱
這里沒有寫
面向?qū)ο?封裝性
理解
封裝( encapsulation)怎么去理解,一臺電腦利用一個外殼包裹回论,保護了里面的電器元件散罕,提供了少量的按鍵與其對接使用。我要看電視傀蓉,只需要按一下開關(guān)和換臺就可以了欧漱。有必要了解電視機內(nèi)部的結(jié)構(gòu)嗎?有必要碰碰顯像管嗎葬燎?制造廠家為了方便我們使用電視误甚,把復(fù)雜的內(nèi)部細節(jié)全部封裝起來,只給我們暴露簡單的接口谱净,比如:電源開關(guān)窑邦。具體怎么內(nèi)部實現(xiàn)的,我們不需要操心壕探。
需要讓用戶知道的暴露出來冈钦,不需要讓用戶了解的全部隱藏起來。這就是封裝,白話: “ 該露的露李请,該藏的藏”瞧筛。
概念
? 我們程序設(shè)計要追求“ 高內(nèi)聚,低耦合”导盅。高內(nèi)聚就是類的內(nèi)部數(shù)據(jù)操作細節(jié)自己完成较幌,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用白翻。利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起乍炉,使其構(gòu)成一個不可分割的獨立實體,數(shù)據(jù)被保護在抽象數(shù)據(jù)類型的內(nèi)部,盡可能地隱藏內(nèi)部的細節(jié)岛琼,只保留一些對外接口使之與外部發(fā)生聯(lián)系底循。系統(tǒng)的其他部分只有通過包裹在數(shù)據(jù)外面的被授權(quán)的操作來與這個抽象數(shù)據(jù)類型交流與交互。也就是說衷恭,用戶無需知道對象內(nèi)部方法的實現(xiàn)細節(jié),但可以根據(jù)對象提供的外部接口(對象名和參數(shù))訪問該對象纯续。
作用
a)随珠、實現(xiàn)了專業(yè)的分工。將能實現(xiàn)某一特定功能的代碼封裝成一個獨立的實體后猬错,各程序員可以在需要的時候調(diào)用窗看,從而實現(xiàn)了專業(yè)的分工,即工作中的分模塊、分功能開發(fā)倦炒。
b)显沈、隱藏信息,實現(xiàn)細節(jié)逢唤。通過控制訪問權(quán)限可以將可以將不想讓客戶端程序員看到的信息隱藏起來拉讯,如某客戶的銀行的密碼需要保密,只能對該客戶開發(fā)權(quán)限鳖藕。
javabean
規(guī)則
在編寫 javabean 中的有一些常用的規(guī)則如:
1)魔慷、屬性盡可能私有化 private
2)、訪問器: setter 與 getter 訪問器 >private 著恩,一般 public 居多 setterXxx: 存儲> 與 getterXxx: 查看
代碼
public class Person { //姓名
private String name; //年齡
private int age; //性別
private boolean sex;
? public Person() {
? }
? //setter與getter
? public String getName() {
return name;
}
? public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
經(jīng)典MVC思想
概述
MVC是一種分層思想院尔,一種設(shè)計模式。
M:Model層(模型層 )
處理數(shù)據(jù)喉誊、業(yè)務(wù)邀摆,再把處理后的數(shù)據(jù)提供給視圖層
V:View層(視圖層)
為用戶展示數(shù)據(jù),是數(shù)據(jù)最直觀的體現(xiàn)伍茄。
C:Controller層(業(yè)務(wù)邏輯層)
接收界面層的數(shù)據(jù)栋盹,對接受到的數(shù)據(jù)進行封裝和類型轉(zhuǎn)換。
調(diào)用模型層的服務(wù)進行業(yè)務(wù)邏輯的處理敷矫。
調(diào)用合適的視圖去渲染數(shù)據(jù)贞盯。
優(yōu)點
- 減少代碼量,提升性能(效率)沪饺;
- 提高代碼的擴展性(需求改動躏敢,無需改動太多的代碼)
- 遵循高內(nèi)聚、低耦合的原則
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pZvJ4SlB-1609312950192)(/1581945749553.png)]
權(quán)限修飾符
public: 一覽無遺整葡;
protected:子承父業(yè) (兒子自己使用)件余;
default :家庭和睦;
private :占為已有
面向?qū)ο?多態(tài)性
女朋友把我?guī)У郊遥赡改镆豢刺淦鳎偭搜≡瓉硎窍瘛霸緜ァ保?/p>
概述
多態(tài) polymorphism,主要是用來實現(xiàn)動態(tài)聯(lián)編的端壳,換句話說告丢,就是程序的最終狀態(tài)只有 在執(zhí)行過程中才被決定而非在編譯期間就決定了。這對于大型系統(tǒng)來說能提高系統(tǒng)的靈活性和擴展性损谦。
java中如何實現(xiàn)多態(tài)?使用多態(tài)的好處?
引用變量的兩種類型: ? 編譯時類型(模糊一點岖免,一般是一個父類)
? ? 由聲明時的類型決定。
? ? 運行時類型(運行時照捡,具體是哪個子類就是哪個子類)
? ? 由實際對應(yīng)的對象類型決定颅湘。
多態(tài)的存在要有3個必要條件:要有繼承,要有方法重寫栗精,父類引用指向子類對象
代碼
這里沒有寫
引用數(shù)據(jù)類型的類型轉(zhuǎn)換
? 子類轉(zhuǎn)換為父類:自動轉(zhuǎn)換
? 上轉(zhuǎn)型對象不能操作子類新增的成員變量和方法闯参。
? 上轉(zhuǎn)型對象可以操作子類繼承或重寫的成員變量和方法
? 如果子類重寫了父類的某個方法,上轉(zhuǎn)型對象調(diào)用該方法時悲立,是調(diào)用的重寫方法鹿寨。
? 父類轉(zhuǎn)換為子類:強制轉(zhuǎn)換
(絕不是做手術(shù),而是父類的真面目就是一個子類薪夕,否則會出現(xiàn)類型轉(zhuǎn)換錯誤
抽象類
概述
使用了關(guān)鍵詞 abstract 聲明的類叫作”抽象類”释移。
抽象類是對抽象的世界建模,是作為父類使用的寥殖。比如: 請求出一個圖形的面積玩讳? 這是你的思考究竟是什么圖形?這個圖形太抽象了嚼贡?是三角形還是原型熏纯?圖形怎么求面積?這個時候就可以把圖形定義為抽象類粤策。
幾個要點
- 抽象方法和抽象類均必須用abstract來修飾樟澜。
- 抽象方法沒有方法體,只需要聲明不需實現(xiàn)叮盘。
- 有抽象方法的類只能定義能抽象類 秩贰。
- 相反抽象類里面的方法不一定全是抽象方法,也可能沒有抽象方法柔吼。
- 抽象類可以包含屬性毒费、方法、構(gòu)造方法愈魏。
- 抽象類不能實例化觅玻,及不能用new來實例化抽象類想际,只能用來被子類調(diào)用。
- 抽象類只能用來繼承溪厘。
- 抽象方法必須被子類實現(xiàn)胡本。抽象類的子類必須覆蓋所有的抽象方法才能被實例化,否則還是抽 象類畸悬。
代碼
這里沒有寫
接口
概述
? 接口(interface ),比“抽象類”還“抽象”的“抽象類”侧甫,可以更加規(guī)范的對子類進行約束。全面地專 業(yè)地實現(xiàn)了:規(guī)范和具體實現(xiàn)的分離
如何定義
? 格式:
? ? [訪問修飾符] interface 接口名 [extends 父接口1蹋宦,父接口2…] {
? ? 常量定義 //總是public static final
? ? 方法定義 //總是:public abstract ?
? }
如何實現(xiàn)
- 子類通過implements來實現(xiàn)接口中的規(guī)范
- 接口不能創(chuàng)建實例披粟,但是可用于聲明引用變量類型。
- 一個類實現(xiàn)了接口妆档,必須實現(xiàn)接口中所有的方法僻爽,并且這些方法只能是public的虫碉。
- Java的類只支持單繼承贾惦,接口支持多繼承
空接口
只是給 JVM 的一種標識而已,就是 JVM 的通行證。
1)敦捧、java.lang.Cloneable :不是所有的對象都可以被克隆 否則CloneNotSupportedException
2)须板、java.io.Serializable
實際開發(fā)中,一個業(yè)務(wù)邏輯處理類永遠不要去繼承一個實現(xiàn)好的類兢卵,要么繼承抽象類习瑰,要么實現(xiàn)接口,優(yōu)先使用接口秽荤,避免單繼承的局限 :abstract class表示的是"is a"關(guān)系甜奄,interface表示的是"like a"關(guān)系