加個關注,互相學習,後面也會不斷更新文章和新的學習資料哦。
前言
介面是Java中的一個重要的型別,實際專案開發中會大量使用到介面,也稱為:面向介面程式設計,本章將詳細介紹介面的概念和使用以及內部類。
介面
介面是什麼
生活中的介面如電腦上的USB介面,規範了介面的形狀、尺寸等,只要符合該規範的裝置就可以連線上去。
程式中的介面是一套規範,規定了方法的定義,只要是實現了該介面的類必須按照介面的規範來定義。
使用介面
定義介面的語法:
public interface 介面名{ 靜態常量的定義; 方法的定義;}
定義介面要注意:
方法是abstract的,不能實現
定義的屬性會自動轉變為靜態常量
方法只能是public的,預設是public
實現介面
public class 類名 implements 介面名{ 具體方法的實現}
實現介面要注意:
必須實現所有介面中的方法
方法必須和介面中定義的完全一致
方法必須是public的
一個類可以實現多個介面
一個類可以繼承類同時實現介面
class 類名 extends 父類 implements 介面{}
介面可以繼承介面,實現類必須實現所有的方法
interface A{ void testA();}//介面之間的繼承interface B extends A{ void testB();}class C implements B{ public void testA() { } public void testB() { }}
介面在開發中的意義
為類的實現制定一套規範
把設計和實現分開
default關鍵字
Java1。8的新特性,被default定義的方法可以有預設的實現。
public interface Person { //給介面方法預設的實現 default void eat(){ System。out。println(“在吃飯!!”); } void walk();}
實現類不強制要求實現帶default的方法。
介面與抽象類的異同
介面和抽象類的區別是常見的面試題相同點:
都可能存在沒有實現的方法
都不能例項化
不同點:
抽象類是單一繼承,類可以實現多個介面
介面不能定義構造方法
介面中的方法只能是public,抽象類可以有各種訪問型別的方法。
介面中只能定義靜態常量,抽象類可以定義普通的成員變數。
介面中的抽象方法不用加abstract,抽象類必須加。
內部類
內部類就是在類裡面定義的類。Java的內部類包含:
成員內部類
靜態內部類
區域性內部類
匿名內部類
成員內部類
和成員變數(屬性)、成員方法同級的,都是屬於某一個物件所有的。語法:
class 外部類{ class 內部類{ 。。。 }}
特點:
一般只在外部類的裡面使用
成員內部類和類的屬性和方法同一級別。
屬於類的物件,在建立每個物件時載入到記憶體
靜態內部類
成員內部類加上static,就是靜態內部類語法:
public class 外部類{ static class 內部類{ }}
和成員內部類的區別:
成員內部類屬於物件,靜態內部類屬於外部類
成員內部類每建立一個物件載入一次,靜態內部類和外部類一起載入
成員內部類能訪問外部類的所有成員,靜態內部類只能訪問外部類靜態的成員
區域性內部類
在方法中定義的類,只能在當前方法中使用,方法呼叫時載入類到記憶體中。語法:
class 外部類{ public void test(){ class 內部類{ } 內部類 物件 = new 內部類(); }}
匿名內部類
一個沒有名字的內部類,建立類的同時建立了物件。應用場合:介面或抽象類的實現類只需要使用一次,程式碼是一次性的。語法:
new 介面/抽象類(){ 實現方法};
實現USB案例
//Usb介面interface Usb{ void connect(); //連線 void charge(); //充電}//匿名內部類實現介面Usb usb = new Usb(){ public void connect(){ System。out。println(“Test2測試連線”); } public void charge(){ System。out。println(“Test2測試充電”); }};usb 。connect();usb 。charge();
和一般類的區別:
沒有名字
只能使用一次
沒有構造方法
不能定義靜態成員
面試題:在?處填寫什麼可以在控制檯輸出30,20,10。
class Outer { public int num = 10; class Inner { public int num = 20; public void show() { int num = 30; System。out。println(?); num System。out。println(?); this。num System。out。println(?); Outer。this。num } } } class InnerClassTest { public static void main(String[] args) { Outer。Inner oi = new Outer()。new Inner(); oi。show(); } }
結束
留兩個作業:
定義播放器介面,播放音樂方法;定義遊戲機介面,玩遊戲方法;定義電話類,有品牌和價格屬性,和打電話方法定義手機類繼承電話並實現播放器和遊戲機介面
定義算術介面,分別定義加減乘除四個方法,每個方法都有兩個double引數,返回值為double。使用常規類和匿名內部類兩種方式實現介面。