本篇文章給大家分享的是有關(guān)java的面向?qū)ο笫鞘裁矗【幱X(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、平陽(yáng)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為平陽(yáng)等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
11、接口(interface)
引入:抽象類是從多個(gè)類中抽象出來(lái)的模板,若要將這種抽象進(jìn)行得更徹底,就得用到一種特殊的“抽象類”→ 接口;
例子:
生活中聽(tīng)說(shuō)過(guò)的USB接口其實(shí)并不是我們所看到的那些插槽,而是那些插槽所遵循的一種規(guī)范;而我們看到的那些插槽是根據(jù)USB規(guī)范設(shè)計(jì)出來(lái)的實(shí)例而已,也就說(shuō)插槽是USB的實(shí)例;
對(duì)應(yīng)不同型號(hào)的USB設(shè)備而言,他們各自的USB插槽都需要遵循一個(gè)規(guī)范,遵守這個(gè)規(guī)范就可以保證插入插槽的設(shè)備能與主板正常通信;
對(duì)于同一種型號(hào)的主板上的多個(gè)USB插槽,他們有相同的數(shù)據(jù)交換方式,相同的實(shí)現(xiàn)細(xì)節(jié),可認(rèn)為他們都是同一個(gè)類的不同實(shí)例
我的總結(jié):
接口只定義了類應(yīng)當(dāng)遵循的規(guī)范,卻不關(guān)心這些類的內(nèi)部數(shù)據(jù)和其方法內(nèi)的實(shí)現(xiàn)細(xì)節(jié).
接口只規(guī)定了這些類里必須提供的方法;從而分離了規(guī)范和實(shí)現(xiàn).增強(qiáng)了系統(tǒng)的可拓展性和維護(hù)性;
使用接口的好處,拓展性,維護(hù)性更好,所以我們?cè)陂_(kāi)發(fā)中會(huì)經(jīng)常用到接口.(相當(dāng)于定義了一種標(biāo)準(zhǔn))
interface定義
接口定義一種規(guī)范,規(guī)定一個(gè)類必須做什么,但它不管如何具體去做;
[修飾符] interface 接口名 extends 父接口1,父接口2....
沒(méi)有構(gòu)造方法,不能實(shí)例化;
接口只能繼承接口,不能繼承類
接口里沒(méi)有普通方法,方法全是抽象的;
接口里的方法默認(rèn)修飾符是public abstract;
接口里的字段全是全局常量,默認(rèn)修飾符是public static final;
接口里的成員包括(主要是前兩個(gè)):
全局常量
公共的抽象方法
內(nèi)部類(包括內(nèi)部類,內(nèi)部接口,內(nèi)部枚舉類);
我的總結(jié):
接口沒(méi)有構(gòu)造方法,不能實(shí)例化!
接口里的方法全部是抽象的,沒(méi)有普通方法,有默認(rèn)的修飾符 public abstract,必須全部覆寫!
12、接口的使用
格式:public class SubImpl extends Super implements IA,IB
接口可以多繼承,但是只能繼承接口,不能繼承類。
實(shí)現(xiàn)接口(支持多實(shí)現(xiàn))
[修飾符] class 類名 implements 接口1,接口2...
接口的實(shí)現(xiàn)必須在 extends 之后;
實(shí)現(xiàn)接口的方法必須是 public 類型
接口與類之間的關(guān)系:
實(shí)現(xiàn)關(guān)系或者說(shuō)是繼承關(guān)系.
可以說(shuō)類實(shí)現(xiàn)了接口的方法,也可以說(shuō)類繼承了接口的方法,不同情況下不同的理解!
13、面向接口編程之制定標(biāo)準(zhǔn)和簡(jiǎn)單工廠模式
制定一個(gè)標(biāo)準(zhǔn),讓別人去實(shí)現(xiàn)或者說(shuō)滿足它!
Eg: interface USB{//定義USB標(biāo)準(zhǔn) void useUSB();//USB有使用USB的行為 }
簡(jiǎn)單工廠模式
構(gòu)建一個(gè)工廠出來(lái),在里面進(jìn)行生產(chǎn),用的時(shí)候直接拿
我的總結(jié):
好處:屏蔽不同子類實(shí)現(xiàn)的差異,提高代碼的可拓展性和可維護(hù)性;
package reviewDemo; //簡(jiǎn)單工廠模式 interface Phone{//制定標(biāo)準(zhǔn),都要實(shí)現(xiàn)send()方法 public void send(); } class Iphone implements Phone{ @Override public void send() { System.out.println("Iphone手機(jī)在發(fā)短信"); } } class AndroidPhone implements Phone{ @Override public void send() { System.out.println("AndroidPhone手機(jī)在發(fā)短信"); } } class MyPhone implements Phone{ @Override public void send() { System.out.println("MyPhone手機(jī)在發(fā)短信"); } } class Factory{ public static void show(String type){//傳入?yún)?shù),根據(jù)不同的類型個(gè)性化定制 if(type.equals("")){//為空的情況,不用往下執(zhí)行 System.out.println("對(duì)不起,類型為空!,請(qǐng)重新輸入!"); return; } Phone p = null; if("Iphone".equals(type)){//判斷類型 p = new Iphone(); }else if("AndroidPhone".equals(type)){ p = new AndroidPhone(); }else{ p = new MyPhone(); } p.send(); } } public class FactoryDemo17 { public static void main(String[] args) { new Factory().show("Iphone");//調(diào)用方法 new Factory().show("AndroidPhone"); new Factory().show("MyPhone"); new Factory().show("YourPhone"); new Factory().show(""); } }
輸出:
Iphone手機(jī)在發(fā)短信
AndroidPhone手機(jī)在發(fā)短信
MyPhone手機(jī)在發(fā)短信
MyPhone手機(jī)在發(fā)短信
對(duì)不起,類型為空!
14、面向接口編程之適配器模式
使用一個(gè)現(xiàn)成的類,但是它的接口不完全符合你的需求,我只想要它其中的一個(gè)方法,不想覆寫其他的方法。
比如,窗體有變大,變小,關(guān)閉的行為,但是我現(xiàn)在只需要關(guān)閉行為;
package reviewDemo; //適配器模式:只想用其中的某一個(gè)方法,用適配器作為中間的過(guò)渡 interface Windows{ void max(); void min(); void close(); } //適配器模式,實(shí)現(xiàn)接口所有的方法,但是不寫方法體! class AdapterWindows implements Windows{ @Override public void max() { } @Override public void min() { } @Override public void close() { } } class MyWindows extends AdapterWindows{ //覆寫父類的方法 public void close(){ System.out.println("這個(gè)實(shí)現(xiàn)的是關(guān)閉功能!"); } } public class Demo17 { public static void main(String[] args) { new MyWindows().close(); } }
接口和抽象類的比較
相同點(diǎn):
都位于繼承的頂端,用于被其他實(shí)現(xiàn)或繼承;
都不能實(shí)例化;
都包含抽象方法,其子類都必須覆寫這些抽象方法;
區(qū)別:
抽象類為部分方法提供實(shí)現(xiàn),避免子類重復(fù)實(shí)現(xiàn)這些方法,提供代碼重用性;接口只能包含抽象方法;
一個(gè)類只能繼承一個(gè)直接父類(可能是抽象類),卻可以實(shí)現(xiàn)多個(gè)接口;(接口彌補(bǔ)了Java的單繼承)
二者的選用:
優(yōu)先選用接口,盡量少用抽象類;
需要定義子類的行為,又要為子類提供共性功能時(shí)才選用抽象類;
總結(jié):接口不能有構(gòu)造函數(shù),抽象類是可以有構(gòu)造函數(shù)的,
abstract可以定義構(gòu)造函數(shù)(包括帶函數(shù)的構(gòu)造函數(shù)),因?yàn)橐WC其子類在創(chuàng)建的時(shí)候能夠進(jìn)行正確的初始化,但是Abstract類不能被實(shí)例化。
知識(shí)點(diǎn):如果不可以或者沒(méi)有創(chuàng)建對(duì)象,那么我們必須加上static修飾,不能用對(duì)象調(diào)用,就只好用類去調(diào)用。
16、匿名內(nèi)部類
適合只使用一次的類
不能是抽象類,因?yàn)橄到y(tǒng)在創(chuàng)建匿名內(nèi)部類的時(shí)候,會(huì)立即創(chuàng)建匿名內(nèi)部類的對(duì)象。
匿名內(nèi)部類不能定義構(gòu)造器,因?yàn)槟涿麅?nèi)部類沒(méi)有類名。
格式: new 父類構(gòu)造器([實(shí)參列表]) 或 接口() { //匿名內(nèi)部類的類體部分 }
17、枚舉類
使用enum聲明,默認(rèn)直接繼承了java.lang.Enum類,而不是Object類;
枚舉類的對(duì)象是固定的,實(shí)例個(gè)數(shù)有限,不可以再new( ),枚舉對(duì)象后可以跟()。
枚舉元素必須位于枚舉類體中的最開(kāi)始部分,枚舉元素后要有分號(hào)與其他成員分隔。
枚舉類的構(gòu)造方法的權(quán)限修飾符默認(rèn)是private;
一旦枚舉對(duì)象后面加上{},那么該對(duì)象實(shí)際是枚舉匿名內(nèi)部類對(duì)象;
所有枚舉類都提供一個(gè)靜態(tài)的values()方法(返回該枚舉類所有對(duì)象組成的數(shù)組),便于遍歷所有枚舉對(duì)象;
所有枚舉類都提供一個(gè)靜態(tài)的valueOf(String name)方法, 返回枚舉類中對(duì)象名等于 name的對(duì)象。
Eg:public enum Color{ RED(), GREEN(){}, BLUE{}; } package reviewDemo; //枚舉 enum Color{ Green,Blue,Yellow; @Override public String toString() { String ret = super.toString(); switch (this) { case Green: ret = "綠色"; break; case Blue: ret = "藍(lán)色"; break; case Yellow: ret = "黃色"; break; default: break; } return ret; } } class Personp{ Color c = Color.Blue; void show(){ System.out.println(c); } } public class Demo18 { public static void main(String[] args) { Color []color = Color.values(); for (Color c : color) { System.out.println(c); } new Personp().show(); } }
輸出:
綠色
藍(lán)色
黃色
藍(lán)色
枚舉類覆寫接口抽象方法的兩種方式:
在枚舉類中實(shí)現(xiàn)接口的抽象方法;
在枚舉匿名內(nèi)部類中實(shí)現(xiàn)接口的抽象方法;
interface I{ void show(); } enum Color implements I{ RED(){ public void show(){ } }, GREEN{ public void show(){ } }, BLUE{ public void show(){ } }; } enum Color implements I{ RED(), GREEN, BLUE; public void show() { } }
總結(jié):枚舉不可以new();即便是反射也不可以!
備注:一個(gè)類如果沒(méi)有構(gòu)造方法,那么一定有相對(duì)應(yīng)的某個(gè)方法可以獲取對(duì)象!
以上就是java的面向?qū)ο笫鞘裁?,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文名稱:java的面向?qū)ο笫鞘裁?/a>
標(biāo)題來(lái)源:http://chinadenli.net/article12/jhhpdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計(jì)公司、云服務(wù)器、網(wǎng)站策劃、網(wǎng)站營(yíng)銷、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)