封裝:數(shù)據(jù)隱藏 :private,get/set;
2: 將程序中的相同代碼進(jìn)行抽取封裝成方法;
3:將一些負(fù)載的操作 變成比較簡單的操作论矾;?? jdbc ------> mybatis
繼承:?
1.? is -a 的關(guān)系于樟;????? 接口:like -a? ; 組合 has-a 的關(guān)系;
2.子父類
3.方法重寫 : 權(quán)限修飾符和異衬茨遥可以變迂曲;?? 權(quán)限是需要大于等于父類的方法; 異常要越來約辛认路捧;
class? A
{
? show() throws?? Exception {}
}
多態(tài): (前提 : 有繼承或者實(shí)現(xiàn)關(guān)系关霸,重寫了父類或者父類接口中)
1. 一個對象具有多重形態(tài);
2.成員變量: 均為左杰扫;?? 變量是不存在覆蓋的情況队寇;
3.成員方法 : 編譯左,運(yùn)行右章姓;
高級應(yīng)用
1: staitc??
?? a. 能夠修飾 類(只能修飾內(nèi)部類)佳遣,方法和變量
b. static? 修飾的數(shù)據(jù) ( 方法和變量) 被該類的所有對象所共享 ,因?yàn)樗鼘儆谶@個類凡伊;
c. static 只能修飾 全局變量(成員+ 類變量) 零渐,不能修飾局部變量;
d.靜態(tài)數(shù)據(jù)可以直接訪問靜態(tài)數(shù)據(jù)系忙;?? 不能直接訪問非靜態(tài) (產(chǎn)生順序的問題)诵盼;
e: 子父類關(guān)系中,父類的靜態(tài)方法不能重寫為非靜態(tài)银还;
f.靜態(tài)數(shù)據(jù) 可以使用類名直接調(diào)用伏嗜,雖然對象也可以調(diào)用唆姐,不推薦使用對象調(diào)用靜態(tài)數(shù)據(jù);如果使用對象調(diào)用靜態(tài)數(shù)據(jù),實(shí)際上是對象將操作委托給類均践;
g.靜態(tài)代碼塊:伴隨類的加載而執(zhí)行展姐,只執(zhí)行一次躬存; ???? 構(gòu)造代碼塊: 伴隨著構(gòu)造器的執(zhí)行而執(zhí)行筒饰,而且優(yōu)先于構(gòu)造器;構(gòu)造代碼塊? 主要是對程序中的成員變量進(jìn)行顯示初始化羹呵;
h. 靜態(tài)導(dǎo)入?
(練習(xí))?
2: final?? 關(guān)鍵字
?????? a. 修飾類 不能被繼承骂际,方法? 不能被重寫, 變量?? 不能修改值冈欢;
b.? final修飾的變量歉铝, 由于不餓能更改值所以被稱之為常量;
c. 當(dāng)final 修飾的是全局變量時凑耻,在定義該變量時必須顯示初始化(不能默認(rèn)初始化);? 當(dāng)final 修飾的是局部變量的時候太示,在使用之前必須顯示化賦值,而且不能再更改香浩;
d. fianl? 也可以用于修飾方法的形式參數(shù)类缤;方法的形式參數(shù)相當(dāng)該方法的局部變量;
3: 訪問控制邻吭,權(quán)限修飾符
public? :? 任意類中都可以訪問餐弱,能修飾類,方法,變量膏蚓;
default : 什么都不寫瓢谢,默認(rèn)修飾符, 能修飾 方法驮瞧,類氓扛, 變量;
protected: 受保護(hù)的论笔,能修飾方法和變量采郎;
prviate :? 私有的,只能在本類中訪問狂魔; 能修飾類(僅限修飾 成員內(nèi)部類) 方法蒜埋,變量;
同包同類???????????????????? 同包不同類????????????? 不同包不同類?????? 不同包子父類??? 同包子父類
4:抽象類和接口
抽象類:
a.在java中 使用abstract 修飾的類 稱之為抽象類毅臊;? 只能提出一個大概的方法理茎,但是無法描述具體的每個情況黑界,這種時候使用 抽象類管嬉。 子類繼承抽象類之后需要自己去實(shí)現(xiàn)抽象類的功能,抽象類只提供以一個標(biāo)準(zhǔn)朗鸠;
b. 抽象類中有構(gòu)造器蚯撩,也可以自己定義構(gòu)造器,但是不能通過抽象類中的抽象類 不能被實(shí)例化烛占;
c.抽象類的使用 主要是通過創(chuàng)建新的類【子類】? 繼承該抽象類【父類】 胎挎,創(chuàng)建子類對象,重寫父類中的抽象方法忆家,然后調(diào)用方法犹菇;??? 也可以通過匿名內(nèi)部類的形式訪問抽象類中的數(shù)據(jù);
d.如果創(chuàng)建的新的類 繼承了抽象類芽卿,但不重寫抽象類中的抽象方法揭芍,則這個類夜要定義成抽象類;
e:抽象類不一定有抽象方法卸例,抽象方法的類一定是抽象類??
f.不能被private 修飾称杨;
g.抽象類中 是可以用普通方法的;
疑問筷转? 并沒有節(jié)省代碼姑原,還是自己要重寫 為什么還要繼承抽象類;
抽象類: 只能夠是子類的引用父類
我們舉個簡單的例子:我們有一個動物的類呜舒,里面有一個Run的方法锭汛,這個時候我們需要繼承他,一只狗說我會跑,老虎說我也會跑店乐,孔雀說我也會跑艰躺,這個時候每一個子類都要繼承他,而且由于Run方法已經(jīng)被父類實(shí)現(xiàn)了眨八,所以每一個都要重寫方法體腺兴,是不是很麻煩,這個時候JDK就說了廉侧,既然那么多類需要繼承他页响,我直接不實(shí)現(xiàn)這個方法,你們誰用誰實(shí)現(xiàn)算了段誊。這個就是抽象類存在的意義闰蚕! 說的比較官方一些的話,就是抽象類可以將設(shè)計(jì)和實(shí)現(xiàn)分離连舍,你寫你的抽象類没陡,我寫我的實(shí)現(xiàn)方法。這也是為什么說抽象方法必須被繼承才有意義 --------------------- 作者:何處錦繡不灰堆
意義 在于: 誰用誰實(shí)現(xiàn)索赏,如果沒有實(shí)現(xiàn)盼玄,父類的抽象方法是沒有意義的;
接口 : interface?? name {
}
1.接口是對抽象類更高層次的抽象潜腻;
2.接口中的方法全部都是抽象方法(默認(rèn)自帶是public? abstract? 修飾)埃儿;但是在JDK9中,接口中也是有可以存在不同方法的融涣;
3.接口中只有成員變量,并且該變量是public static final 修飾? 這不就變成了常量嗎威鹿;?? 局部變量——? 在方法中存在的剃斧;
4:接口沒有構(gòu)造器,不能創(chuàng)建對象忽你,只能通過創(chuàng)建接口的實(shí)現(xiàn)類【】的對象來使用接口幼东;
5: 定義的子類實(shí)現(xiàn)了接口,但是沒有重寫接口中的全部抽象方法檀夹,該子類也需定義為抽象類筋粗;?
6: 類只能單繼承,但是接口可以多實(shí)現(xiàn)炸渡,也可以多繼承娜亿;
7:接口繼承了就必須實(shí)現(xiàn)它;
接口的作用:? 是的開發(fā)和設(shè)計(jì)分開蚌堵; 一個人負(fù)責(zé)設(shè)計(jì)接口买决,一些人負(fù)責(zé)實(shí)現(xiàn)接口沛婴;
如果是一個人開發(fā) 那么接口和類沒有必要區(qū)分了。
5:內(nèi)部類
6 : == 和equals 方法的區(qū)別督赤;
7 :? String類和object 類嘁灯;