前言
接口是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。使用常規類和匿名內部類兩種方式實現接口。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。
發表評論
請登錄后評論...
登錄后才能評論