Java面向物件程式設計的介面和內部類

加個關注,互相學習,後面也會不斷更新文章和新的學習資料哦。

前言

介面是Java中的一個重要的型別,實際專案開發中會大量使用到介面,也稱為:面向介面程式設計,本章將詳細介紹介面的概念和使用以及內部類。

介面

介面是什麼

生活中的介面如電腦上的USB介面,規範了介面的形狀、尺寸等,只要符合該規範的裝置就可以連線上去。

Java面向物件程式設計的介面和內部類

程式中的介面是一套規範,規定了方法的定義,只要是實現了該介面的類必須按照介面的規範來定義。

使用介面

定義介面的語法:

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。使用常規類和匿名內部類兩種方式實現介面。