java介面內部介面
1. 在java中,什麼是介面,介面的特點是什麼
Java介面(Interface),是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
一.介面含義:
1.Java介面,Java語言中存在的結構,有特定的語法和結構;2.一個類所具有的方法的特徵集合,是一種邏輯上的抽象。
前者叫做「Java介面」,後者叫做「介面」。
Java介面本身沒有任何實現,因為Java介面不涉及表象,而只描述public行為,所以Java介面比Java抽象類更抽象化。
Java介面的方法只能是抽象的和公開的,Java介面不能有構造器,Java介面可以有public,靜態的和final屬性。
二.為何用介面Java是一種單繼承的語言,若要給已有父類的具體類增加新功能,在OCP原則下,解決是給它的父類加父類,或者給它父類的父類加父類,直到移動到類等級結構的最頂端。這樣一來,對一個具體類的可插入性的設計,就變成了對整個等級結構中所有類的修改。
當有了介面,以上例子中,就不需要維護整個等級結構中的所有類了.
三.介面具胡可插入性:
在一個等級結構中的任何一個類都可以實現一個介面,這個介面會影響到此類的所有子類,但不會影響到此類的任何超類。此類將不得不實現這個介面所規定的方法,而其子類可以從此類自動繼承這些方法,當然也可以選擇置換掉所有的這些方法,或者其中的某一些方法,這時候,這些子類具有了可插入性(並且可以用這個介面類型裝載,傳遞實現了他的所有子類)。
介面提供了關聯以及方法調用上的可插入性,軟體系統的規模越大,生命周期越長,介面使得軟體系統的靈活性和可擴展性,可插入性方面得到保證。
正是有了介面,使得Java單繼承性有了新的擴展的可能(變向地實現多繼承);三.類型等級結構Java介面(以及抽象類)一般用來作為一個類型的等級結構的起點。
如果一個類已經有了一個主要的超類型,那麼通過實現一個介面,這個類可以擁有另一個次要的超類型,這種次要的超類型叫做混合類型。
四.Java介面分類
1、普通介面(含有方法定義)publicinterfaceActionListener{(ActionEventevent);}
2、標識介面(無任何方法和屬性定義)標識介面是沒有任何方法和屬性的介面.標識介面不對實現它的類有任何語義上的要求,它僅僅表明實現它的類屬於一個特定的類型。
publicinterfaceSerializable{};
3、常量介面是指用Java介面來聲明一些常量,然後由實現這個介面的類使用這些常量。
publicinterfaceAppConstants{publicstaticfinalDATA_SOURCE_NAME="test";publicstaticfinalUSER_NAME="test";publicstaticfinalPASSWORD="test";}
五.介面的特點
1、Java介面中的成員變數默認都是public,static,final類型的(都可省略),必須被顯示初始化,即介面中的成員變數為常量(大寫,單詞之間用"_"分隔)
2、Java介面中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化
3、Java介面中只能包含public,static,final類型的成員變數和public,abstract類型的成員方法
4、介面中沒有構造方法,不能被實例化5、一個介面不能實現(implements)另一個介面,但它可以繼承多個其它的介面
6、Java介面必須通過類來實現它的抽象方法
7、當類實現了某個Java介面時,它必須實現介面中的所有抽象方法,否則這個類必須聲明為抽象類
8、不允許創建介面的實例(實例化),但允許定義介面類型的引用變數,該引用變數引用實現了這個介面的類的實例
9、一個類只能繼承一個直接的父類,但可以實現多個介面,間接的實現了多繼承.
六.Java介面和Java抽象類區別面向對象設計的重點在於抽象。抽象類與介面都位於繼承樹的上層。
相同點:
1、代表系統的抽象層,當一個系統使用一顆繼承樹上的類時,應該盡量把引用變數聲明為繼承樹的上層抽象類型,這樣可以提高兩個系統之間的送耦合
2、都不能被實例化
3、都包含抽象方法,這些抽象方法用於描述系統能提供哪些服務,但不包含方法體不同點:
1、最大的一個區別,就在於Java抽象類可以提供某些方法的部分實現,而Java介面不可以;這大概就是Java抽象類唯一的優點吧,但這個優點非常有用。
可以向抽象類里加入一個新的具體方法,所有的子類都自動得到這個方法;但Java介面里加入一個新方法,所有實現這個介面的類就無法成功通過編譯,必需手動給每個實現了該介面的類加上該方法的實現;
2、抽象類的實現只能由子類給出,也即該實現只能在抽象類定義的繼承的等級結構中;所以抽象類作為類型定義工具的效能大打折扣。
Java介面,任何一個實現了一個Java介面所規定的方法的類都可以具有這個介面的類型,而一個類可以實現任意多個Java介面,從而這個類就有了多種類型。
以上看出:Java介面是定義混合類型的理想工具,混合類表明一個類不僅僅具有某個主類型的行為,而且具有其他的次要行為。
3、結合1、2點中抽象類和Java介面的各自優勢,具精典的設計模式就出來了:
聲明類型的工作仍然由Java介面承擔,但是同時給出一個Java抽象類,且實現了這個介面,而其他同屬於這個抽象類型的具體類可以選擇實現這個Java介面,也可以選擇繼承這個抽象類,也就是說在層次結構中,Java介面在最上面,然後緊跟著抽象類,這下兩個的最大優點都能發揮到極至了。這個模式就是「預設適配模式」。
在Java語言API中用了這種模式,而且全都遵循一定的命名規范:Abstract+介面名。
七.使用介面和抽象類的總體原則:
1、用介面作為系統與外界交互的窗口站在外界使用者(另一個系統)的角度,介面向使用者承諾系統能提供哪些服務,站在系統本身的角度,介面制定系統必須實現哪些服務,介面是系統中最高層次的抽象類型.通過介面交互可以提高兩個系統之間的送耦合系統A通過系統B進行交互,是指系統A訪問系統B時,把引用變數聲明為系統B中的介面類型,該引用變數引用系統B中介面的實現類的實例。
publicinterfaceB{}
publicclassCimplementsB{}
publicclassA{Ba=newC();}
2、Java介面本身必須非常穩定,Java介面一旦制定,就不允許隨遇更加,否則對外面使用者及系統本身造成影響3、用抽象類來定製系統中的擴展點,抽象類來完成部分實現,還要一些功能通過它的子類來實現
2. 誰知道Java中的介面是指什麼
一、什麼是介面
java介面(Interface),是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
二、java中介面定義的一般形式:
[訪問控制符]interface <介面名> {
類型標識符final 符號常量名n = 常數;
返回值類型 方法名([參數列表])
}
下面我們例舉了幾種定義介面的方法:
方法一:
interface B {
//coding here !
}
public interface A extends B{
//coding here !
}
方法二:
abstract class C{
public C(){
}
}
abstract class D extends C{
public D(){
super();
}
}
方法三:
public interface A {
//coding here !
}
abstract class C implements A{
public C(){
}
}
方法四:
interface B {
//coding here !
}
public interface A extends B{
//coding here !
}
abstract class C implements A{
public C(){
}
}
class D extends C{
public D(){
super();
}
}
二、介面的特點
1、Java介面中的成員變數默認都是public,static,final類型的(都可省略),必須被顯示初始化,即介面中的成員變數為常量(大寫,單詞之間用"_"分隔)
2、Java介面中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化
3、Java介面中只能包含public,static,final類型的成員變數和public,abstract類型的成員方法
4、介面中沒有構造方法,不能被實例化
5、一個介面不能實現(implements)另一個介面,但它可以繼承多個其它的介面
6、Java介面必須通過類來實現它的抽象方法
7、當類實現了某個Java介面時,它必須實現介面中的所有抽象方法,否則這個類必須聲明為抽象類
8、不允許創建介面的實例(實例化),但允許定義介面類型的引用變數,該引用變數引用實現了這個介面的類的實例
9、一個類只能繼承一個直接的父類,但可以實現多個介面,間接的實現了多繼承.
這些都是Java的基礎知識你可以去一個叫做秒秒學的網站學習相關內容
3. java鐨勬帴鍙
Java涓鐨勬帴鍙f槸涓緋誨垪鏂規硶鐨勫0鏄庯紝鏄涓浜涙柟娉曠壒寰佺殑闆嗗悎錛屼竴涓鎺ュ彛鍙鏈夋柟娉曠殑鐗瑰緛娌℃湁鏂規硶鐨勫疄鐜幫紝鍥犳よ繖浜涙柟娉曞彲浠ュ湪涓嶅悓鐨勫湴鏂硅涓嶅悓鐨勭被瀹炵幇錛岃岃繖浜涘疄鐜板彲浠ュ叿鏈変笉鍚岀殑琛屼負(鍔熻兘)銆
鎺ュ彛鐨勪袱縐嶅惈涔夛細涓錛孞ava鎺ュ彛錛孞ava璇璦涓瀛樺湪鐨勭粨鏋勶紝鏈夌壒瀹氱殑璇娉曞拰緇撴瀯;浜岋紝涓涓綾繪墍鍏鋒湁鐨勬柟娉曠殑鐗瑰緛闆嗗悎錛屾槸涓縐嶉昏緫涓婄殑鎶借薄銆傚墠鑰呭彨鍋氣淛ava鎺ュ彛鈥濓紝鍚庤呭彨鍋氣滄帴鍙b濄
鍦↗ava璇璦瑙勮寖涓錛屼竴涓鏂規硶鐨勭壒寰佷粎鍖呮嫭鏂規硶鐨勫悕瀛楋紝鍙傛暟鐨勬暟鐩鍜岀嶇被錛岃屼笉鍖呮嫭鏂規硶鐨勮繑鍥炵被鍨嬶紝鍙傛暟鐨勫悕瀛椾互鍙婃墍鎶涘嚭鏉ョ殑寮傚父銆傚湪Java緙栬瘧鍣ㄦ鏌ユ柟娉曠殑閲嶈澆鏃訛紝浼氭牴鎹榪欎簺鏉′歡鍒ゆ柇涓や釜鏂規硶鏄鍚︽槸閲嶈澆鏂規硶銆備絾鍦↗ava緙栬瘧鍣ㄦ鏌ユ柟娉曠殑緗鎹㈡椂錛屽垯浼氳繘涓姝ユ鏌ヤ袱涓鏂規硶(鍒嗗勮秴綾誨瀷鍜屽瓙綾誨瀷)鐨勮繑榪樼被鍨嬪拰鎶涘嚭鐨勫紓甯告槸鍚︾浉鍚屻
鎺ュ彛緇ф壙鍜屽疄鐜扮戶鎵跨殑瑙勫垯涓嶅悓錛屼竴涓綾誨彧鏈変竴涓鐩存帴鐖剁被錛屼絾鍙浠ュ疄鐜板氫釜鎺ュ彛銆
Java鎺ュ彛鏈韜娌℃湁浠諱綍瀹炵幇錛屽洜涓篔ava鎺ュ彛涓嶆秹鍙婅〃璞★紝鑰屽彧鎻忚堪public琛屼負錛屾墍浠Java鎺ュ彛姣擩ava鎶借薄綾繪洿鎶借薄鍖栥
Java鎺ュ彛鐨勬柟娉曞彧鑳芥槸鎶借薄鐨勫拰鍏寮鐨勶紝Java鎺ュ彛涓嶈兘鏈夋瀯閫犲櫒錛孞ava鎺ュ彛鍙浠ユ湁public錛岄潤鎬佺殑鍜宖inal灞炴с
鎺ュ彛鎶婃柟娉曠殑鐗瑰緛鍜屾柟娉曠殑瀹炵幇鍒嗗壊寮鏉ャ傝繖縐嶅垎鍓蹭綋鐜板湪鎺ュ彛甯稿父浠h〃涓涓瑙掕壊錛屽畠鍖呰呬笌璇ヨ掕壊鐩稿叧鐨勬搷浣滃拰灞炴э紝鑰屽疄鐜拌繖涓鎺ュ彛鐨勭被渚挎槸鎵婕旇繖涓瑙掕壊鐨勬紨鍛樸備竴涓瑙掕壊鐢變笉鍚岀殑婕斿憳鏉ユ紨錛岃屼笉鍚岀殑婕斿憳涔嬮棿闄や簡鎵婕斾竴涓鍏卞悓鐨勮掕壊涔嬪栵紝騫朵笉瑕佹眰鍏跺畠鐨勫叡鍚屼箣澶勩
緙栬緫鏈孌典負浠涔堜嬌鐢ㄦ帴鍙
涓や釜綾諱腑鐨勪袱涓綾諱技鐨勫姛鑳斤紝璋冪敤浠栦滑鐨勭被鍔ㄦ佺殑鍐沖畾涓縐嶅疄鐜幫紝閭d粬浠鎻愪緵涓涓鎶借薄鐖剁被錛屽瓙綾誨垎鍒瀹炵幇鐖剁被鎵瀹氫箟鐨勬柟娉曘
闂棰樼殑鍑虹幇錛欽ava鏄涓縐嶅崟緇ф壙鐨勮璦錛屼竴鑸鎯呭喌涓嬶紝鍝涓鍏蜂綋綾誨彲鑳藉凡緇忔湁浜嗕竴涓瓚呯被錛岃В鍐蟲槸緇欏畠鐨勭埗綾誨姞鐖剁被錛屾垨鑰呯粰瀹冪埗綾葷殑鐖剁被鍔犵埗綾伙紝鍙鍒扮Щ鍔ㄥ埌綾葷瓑綰х粨鏋勭殑鏈欏剁銆傝繖鏍蜂竴鏉ワ紝瀵逛竴涓鍏蜂綋綾葷殑鍙鎻掑叆鎬х殑璁捐★紝灝卞彉鎴愪簡瀵規暣涓絳夌駭緇撴瀯涓鎵鏈夌被鐨勪慨鏀廣
鎺ュ彛鏄鍙鎻掑叆鎬х殑淇濊瘉銆
鍦ㄤ竴涓絳夌駭緇撴瀯涓鐨勪換浣曚竴涓綾婚兘鍙浠ュ疄鐜頒竴涓鎺ュ彛錛岃繖涓鎺ュ彛浼氬獎鍝嶅埌姝ょ被鐨勬墍鏈夊瓙綾伙紝浣嗕笉浼氬獎鍝嶅埌姝ょ被鐨勪換浣曡秴綾匯傛ょ被灝嗕笉寰椾笉瀹炵幇榪欎釜鎺ュ彛鎵瑙勫畾鐨勬柟娉曪紝鑰屽叾瀛愮被鍙浠ヤ粠姝ょ被鑷鍔ㄧ戶鎵胯繖浜涙柟娉曪紝褰撶劧涔熷彲浠ラ夋嫨緗鎹㈡帀鎵鏈夌殑榪欎簺鏂規硶錛屾垨鑰呭叾涓鐨勬煇涓浜涙柟娉曪紝榪欐椂鍊欙紝榪欎簺瀛愮被鍏鋒湁浜嗗彲鎻掑叆鎬(騫朵笖鍙浠ョ敤榪欎釜鎺ュ彛綾誨瀷瑁呰澆錛屼紶閫掑疄鐜頒簡浠栫殑鎵鏈夊瓙綾)銆
鎴戜滑鍏沖績鐨勪笉鏄閭d竴涓鍏蜂綋鐨勭被錛岃屾槸榪欎釜綾繪槸鍚﹀疄鐜頒簡鎴戜滑闇瑕佺殑鎺ュ彛銆
鎺ュ彛鎻愪緵浜嗗叧鑱斾互鍙婃柟娉曡皟鐢ㄤ笂鐨勫彲鎻掑叆鎬э紝杞浠剁郴緇熺殑瑙勬ā瓚婂ぇ錛岀敓鍛藉懆鏈熻秺闀匡紝鎺ュ彛浣垮緱杞浠剁郴緇熺殑鐏墊椿鎬у拰鍙鎵╁睍鎬э紝鍙鎻掑叆鎬ф柟闈㈠緱鍒頒繚璇併
綾誨瀷
浣跨敤Java鎺ュ彛灝嗚蔣浠跺崟浣嶄笌鍐呴儴鍜屽栭儴鑰﹀悎璧鋒潵銆備嬌鐢↗ava鎺ュ彛涓嶆槸鍏蜂綋鐨勭被榪涜屽彉閲忕殑綾誨瀷澹版槑錛屾柟娉曠殑榪旇繕綾誨瀷澹版槑錛屽弬閲忕殑綾誨瀷澹版槑錛屼互鍙婃暟鎹綾誨瀷鐨勮漿鎹銆
鍦ㄧ悊鎯崇殑鎯呭喌涓嬶紝涓涓鍏蜂綋鐨凧ava綾誨簲褰撳彧瀹炵幇Java鎺ュ彛鍜屾娊璞Java綾諱腑澹版槑鐨勬柟娉曪紝鑰屼笉搴斿綋緇欏氫綑鏂規硶銆
綾誨瀷絳夌駭緇撴瀯
Java鎺ュ彛(浠ュ強鎶借薄綾)涓鑸鐢ㄦ潵浣滀負涓涓綾誨瀷鐨勭瓑綰х粨鏋勭殑璧風偣銆
濡傛灉涓涓綾誨凡緇忔湁浜嗕竴涓涓昏佺殑瓚呯被鍨嬶紝閭d箞閫氳繃瀹炵幇涓涓鎺ュ彛錛岃繖涓綾誨彲浠ユ嫢鏈夊彟涓涓嬈¤佺殑瓚呯被鍨嬶紝榪欑嶆¤佺殑瓚呯被鍨嬪彨鍋氭販鍚堢被鍨嬨
緙栬緫鏈孌礘ava鎺ュ彛甯哥敤鏂規硶
鍗曟柟娉曟帴鍙
浠ヤ笅鏄寮曠敤鐗囨碉細
public interface Actionlistener() {
public abstract void actionPerformed(ActionEvent event);
}
浠呬笖鍙鏈変竴涓鏂規硶錛屽彧鏈夊疄鐜頒簡榪欎釜鎺ュ彛(閲嶅啓榪欎釜鎺ュ彛涓鐨勫敮涓涓涓鏂規硶)錛屼綘鎵嶆湁璧勬牸鍘諱簨浠剁洃鍚鍣ㄥ垪琛ㄩ噷娉ㄥ唽(鍙傛暟涓篈ctionlistener綾誨瀷)錛屽綋浜嬩歡婧愬彉鍔ㄦ椂錛岃嚜鍔ㄨ皟鐢ㄨ繖涓鍞涓鐨刟ctionPerformed鏂規硶.
鏍囪瘑鎺ュ彛
鏄娌℃湁浠諱綍鏂規硶鍜屽睘鎬х殑鎺ュ彛銆傛爣璇嗘帴鍙d笉瀵瑰疄鐜板畠鐨勭被鏈変換浣曡鎰忎笂鐨勮佹眰錛屽畠浠呬粎琛ㄦ槑浜嗗疄鐜板畠鐨勭被灞炰簬涓涓鐗瑰畾鐨勭被鍨(浼犻)銆
涓嶆帹鑽愯繃澶氱殑浣跨敤鏍囪瘑鎺ュ彛銆
甯擱噺鎺ュ彛
鐢↗ava鎺ュ彛鏉ュ0鏄庝竴浜涘父閲忥紝鐒跺悗鐢卞疄鐜拌繖涓鎺ュ彛鐨勭被浣跨敤榪欎簺甯擱噺(浠ュ墠鍦ㄥ仛鐢繪澘鐨勬椂鍊欒繖涔堝共榪)銆傚緩璁涓嶈佹ā浠胯繖縐嶅父閲忔帴鍙g殑鍋氭硶銆
4. 怎麼理解Java介面
1、什麼是介面
介面(interface)不是一個類,它是抽象方法的集合。一個類實現一個介面,從而繼承和實現介面的抽象方法。
介面的特點如下,先看與類類似的特點:
介面的寫法和寫一個類類似,但它們是兩個不同的概念。類描述對象的屬性和行為。介面僅僅定義了事物的行為,且不會具體化這個行為。
除非實現介面的是抽象類,不然介面中的所有方法必須在類(實現這個介面的類)中定義且實現。
介面同類一樣,可以包含任何數量的方法。
介面同類一樣,被寫在同一個.java擴展名的源文件中,文件名與介面名稱一致。
介面同類一樣,會被編譯為一個.class文件。
同類一樣,需要指定包(package),來表明介面所在的目錄結構。了解更多package看這里:package和import作用是什麼
介面不能被實例化。
介面不包含任何構造函數。
介面中的所有方法都是抽象的。
介面不包含實例欄位。但可以定義常量,使用static和final關鍵字。
類通過實現介面重寫介面的方法,而不是繼承。
介面可以繼承另一個介面。
與類不同的幾個方面:
5. 鍦╦ava紼嬪簭涓 鎺ュ彛閲屾槸鍚﹀彲浠ュ畾涔夊唴閮ㄦ帴鍙
鍙浠ョ殑銆
浣嗗唴閮ㄦ帴鍙e彧鑳藉畾涔夊湪澶栭儴綾繪垨鎺ュ彛涓嬶紝涓嶈兘瀹氫箟鍦ㄥ唴閮ㄦ娊璞$被鎴栧唴閮ㄦ帴鍙d笅銆
鍐呴儴鎶借薄綾葷殑澶氶噸瀹炵幇錛屽嵆鍦ㄥ唴閮ㄦ娊璞$被鎴栧唴閮ㄦ帴鍙d笅鍐嶅畾涔変簩綰у唴閮ㄦ娊璞$被錛岀敋鑷沖氱駭銆
涓句緥錛
package com.bys.fisher2034;
public class SortUtil {
public interface Sort {
public void sort(int[] arr);
}
public static void swap(int[] data, int i, int j) {
int c = 0;
c = data[i];
data[i] = data[j];
data[j] = c;
}
}
6. JAVA問題:Map.Entry的一般用處是什麼
用途:
1. Map map = new HashMap();
Irerator iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry entry = iterator.next();
Object key = entry.getKey();
}
2.Map map = new HashMap();
Set keySet= map.keySet();
Irerator iterator = keySet.iterator;
while(iterator.hasNext()) {
Object key = iterator.next();
Object value = map.get(key);
}
Map.Entry是Map聲明的一個內部介面,此介面為泛型,定義為Entry。它表示Map中的一個實體(一個key-value對)。介面中有getKey(),getValue方法。
(6)java介面內部介面擴展閱讀:
Map儲存數據的方式,map儲存數據的形式是一個key和一個value對應,即Map<String,String> map = new HashMap<String,String>(); 其儲存的數據類型可以是任意的。
接下來我們簡單的介紹一下它添加數據和遍歷數據的方法:
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
普遍使用,二次取值
System.out.println("通過Map.keySet遍歷key和value:");
for (String key : map.keySet()) { //通過foreach方法來遍歷
System.out.println("key= "+ key + " and value= " + map.get(key));
}