面向?qū)ο?/h1>封裝
把數(shù)據(jù)封裝起來,不然外部隨便訪問;把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏;
把數(shù)據(jù)封裝起來,不然外部隨便訪問;把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏;
繼承
讓某個類型的對象獲得另一個類型的對象的屬性的方法;繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。
1、子類擁有父類非private的屬性和方法。
2、子類可以擁有自己屬性和方法,即子類可以對父類進(jìn)行擴(kuò)展。
3、子類可以用自己的方式實(shí)現(xiàn)父類的方法。
1、父類變,子類就必須變。
2、繼承破壞了封裝,對于父類而言,它的實(shí)現(xiàn)細(xì)節(jié)對與子類來說都是透明的。
3、繼承是一種強(qiáng)耦合關(guān)系。
多態(tài):
同一件事有多種做法;允許你將父對象設(shè)置成為和一個或更多的他的子對象相等的技術(shù),賦值之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運(yùn)作;
Java實(shí)現(xiàn)多態(tài)有三個必要條件:繼承、重寫、向上轉(zhuǎn)型。
繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。
重寫:子類對父類中某些方法進(jìn)行重新定義,在調(diào)用這些方法時就會調(diào)用子類的方法。
向上轉(zhuǎn)型:在多態(tài)中需要將子類的引用賦給父類對象,只有這樣該引用才能夠具備技能調(diào)用父類的方法和子類的方法。

構(gòu)造方法
子類可以繼承父類的屬性和方法,除了那些private的外還有一樣是子類繼承不了的---構(gòu)造器。對于構(gòu)造器而言,它只能夠被調(diào)用,而不能被繼承。 調(diào)用父類的構(gòu)造方法我們使用super()即可。
proctected
對于protected而言,它指明就類用戶而言,他是private,但是對于任何繼承與此類的子類而言或者其他任何位于同一個包的類而言,他卻是可以訪問的。
static:靜態(tài)
類變量、方法 通過類名直接調(diào)用;
非靜態(tài)不能調(diào)用靜態(tài);
不能以任何形式引用this、super。
final:
修飾變量 成為常量;
修飾方法,方法不能被覆蓋;
修飾類,類不能被繼承;
抽象類 abstract
抽象類不能被實(shí)例化,實(shí)例化的工作應(yīng)該交由它的子類來完成,它只需要有一個引用即可。
抽象方法必須由子類來進(jìn)行重寫。
只要包含一個抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。
抽象類中可以包含具體的方法,當(dāng)然也可以不包含抽象方法。
子類中的抽象方法不能與父類的抽象方法同名。
abstract不能與final并列修飾同一個類。
abstract 不能與private、static、final或native并列修飾同一個方法。
接口 interface
一個Interface的方所有法訪問權(quán)限自動被聲明為public。確切的說只能為public;
接口中可以定義“成員變量”,“成員變量”會自動變?yōu)闉閜ublic static final
接口中不存在實(shí)現(xiàn)的方法。
實(shí)現(xiàn)接口的非抽象類必須要實(shí)現(xiàn)該接口的所有方法。抽象類可以不用實(shí)現(xiàn)。
不能使用new操作符實(shí)例化一個接口,但可以聲明一個接口變量,該變量必須引用(refer to)一個實(shí)現(xiàn)該接口的類的對象??梢允褂胕nstanceof檢查一個對象是否實(shí)現(xiàn)了某個特定的接口。例如:if(anObject instanceof Comparable){}。
區(qū)別
抽象類在java語言中所表示的是一種繼承關(guān)系,一個子類只能存在一個父類,但是可以存在多個接口。
在抽象類中可以擁有自己的成員變量和非抽象類方法,但是接口中只能存在靜態(tài)的不可變的成員數(shù)據(jù),而且它的所有方法都是抽象的。
抽象類所代表的是“is-a”的關(guān)系,而接口所代表的是“l(fā)ike-a”的關(guān)系。
內(nèi)部類
在類的內(nèi)部定義一個類
每個內(nèi)部類都能獨(dú)立地繼承一個(接口的)實(shí)現(xiàn),所以無論外圍類是否已經(jīng)繼承了某個(接口的)實(shí)現(xiàn),對于內(nèi)部類都沒有影響
內(nèi)部類中不能存在任何static的變量和方法;
內(nèi)部類是依附于外圍類的,所以只有先創(chuàng)建了外圍類才能夠創(chuàng)建內(nèi)部類。
.this
使用.this后,得到時創(chuàng)建該內(nèi)部類時使用的外圍類對象的引用,new則是創(chuàng)建了一個新的引用
直接創(chuàng)建一個內(nèi)部類對象
.new 關(guān)鍵字
OutClass.InnerClass?obj?=?outClassInstance.new?InnerClass();
方法內(nèi)部類
? ? ? ?嵌套在方法和作用域內(nèi),有這樣一種內(nèi)部類,它是嵌套在方法和作用于內(nèi)的,對于這個類的使用主要是應(yīng)用與解決比較復(fù)雜的問題,想創(chuàng)建一個類來輔助我們的解決方案,到那時又不希望這個類是公共可用的,所以就產(chǎn)生了局部內(nèi)部類,局部內(nèi)部類和成員內(nèi)部類一樣被編譯,只是它的作用域發(fā)生了改變,它只能在該方法和屬性中被使用,出了該方法和屬性就會失效。
匿名內(nèi)部類
1、?匿名內(nèi)部類是沒有訪問修飾符的。
2、?new 匿名內(nèi)部類,這個類首先是要存在的。
3、?匿名內(nèi)部類是沒有構(gòu)造方法的。
靜態(tài)內(nèi)部類
它的創(chuàng)建是不需要依賴于外圍類的。
它不能使用任何外圍類的非static成員變量和方法。