java接口的作用和意義「java什麼是接口回調」

前言

接口是Java中的一個重要的類型,實際項目開發中會大量使用到接口,也稱為:面向接口編程,本章將詳細介紹接口的概念和使用以及內部類。

接口

接口是什麼

生活中的接口如電腦上的USB接口,規範了接口的形狀、尺寸等,只要符合該規範的設備就可以連接上去。

Java面向對象編程的接口和內部類

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

使用接口

定義接口的語法:

public interface 接口名{
	靜態常量的定義;
	方法的定義;
}

定義接口要注意:

  1. 方法是abstract的,不能實現
  2. 定義的屬性會自動轉變為靜態常量
  3. 方法只能是public的,默認是public

實現接口

public class 類名 implements 接口名{
	具體方法的實現
}

實現接口要注意:

  1. 必須實現所有接口中的方法
  2. 方法必須和接口中定義的完全一致
  3. 方法必須是public的
  4. 一個類可以實現多個接口
  5. 一個類可以繼承類同時實現接口
class 類名 extends 父類 implements 接口{
}
  1. 接口可以繼承接口,實現類必須實現所有的方法
interface A{
	void testA();
}
//接口之間的繼承
interface B extends A{
	void testB();
}
class C implements B{
	public void testA() {
	}
	public void testB() {
	}
}

接口在開發中的意義

  1. 為類的實現制定一套規範
  2. 把設計和實現分開

default關鍵字

Java1.8的新特性,被default定義的方法可以有默認的實現。

public interface Person {
	//給接口方法默認的實現
	default void eat(){
		System.out.println("在吃飯!!");
	}
	void walk();
}

實現類不強制要求實現帶default的方法。

接口與抽象類的異同

接口和抽象類的區別是常見的面試題相同點:

  1. 都可能存在沒有實現的方法
  2. 都不能實例化

不同點:

  1. 抽象類是單一繼承,類可以實現多個接口
  2. 接口不能定義構造方法
  3. 接口中的方法只能是public,抽象類可以有各種訪問類型的方法。
  4. 接口中只能定義靜態常量,抽象類可以定義普通的成員變量。
  5. 接口中的抽象方法不用加abstract,抽象類必須加。

內部類

內部類就是在類裡面定義的類。Java的內部類包含:

  • 成員內部類
  • 靜態內部類
  • 局部內部類
  • 匿名內部類

成員內部類

和成員變量(屬性)、成員方法同級的,都是屬於某一個對象所有的。語法:

class 外部類{
	class 內部類{
	...
	}
}

特點:

  • 一般只在外部類的裡面使用
  • 成員內部類和類的屬性和方法同一級別。
  • 屬於類的對象,在創建每個對象時加載到內存

靜態內部類

成員內部類加上static,就是靜態內部類語法:

public class 外部類{
	static class 內部類{
	}
}

和成員內部類的區別:

  1. 成員內部類屬於對象,靜態內部類屬於外部類
  2. 成員內部類每創建一個對象加載一次,靜態內部類和外部類一起加載
  3. 成員內部類能訪問外部類的所有成員,靜態內部類只能訪問外部類靜態的成員

局部內部類

在方法中定義的類,只能在當前方法中使用,方法調用時加載類到內存中。語法:

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();

和一般類的區別:

  1. 沒有名字
  2. 只能使用一次
  3. 沒有構造方法
  4. 不能定義靜態成員

面試題:在?處填寫什麼可以在控制台輸出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();
     }    
 }   

結束

留兩個作業:

  1. 定義播放器接口,播放音樂方法;定義遊戲機接口,玩遊戲方法;定義電話類,有品牌和價格屬性,和打電話方法定義手機類繼承電話並實現播放器和遊戲機接口
  2. 定義算術接口,分別定義加減乘除四個方法,每個方法都有兩個double參數,返回值為double。使用常規類和匿名內部類兩種方式實現接口。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/234900.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-12 11:49
下一篇 2024-12-12 11:50

相關推薦

發表回復

登錄後才能評論