類與接口(三)java中的接口與嵌套接口


一、接口

1. 接口簡介

接口: 是java的一種抽象類型,是抽象方法的集合。接口比抽象類更加抽象的抽象類型。

接口語法:

[修飾符] [abstract] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
[public] [static] 方法{};//JDK1.8后
[public] [static] 類/接口;
}

2. 接口成員的修飾符

接口中的所有成員的訪問權限默認強制是 public

  • 變量: 默認強制是public static final
  • 方法: 默認強制是public abstract,即抽象方法。但JDK1.8后,允許定義靜態方法public static,接口存在非抽象方法;
  • 內部類/接口: 默認強制是 public static

下面例子中的接口中定義了各種接口成員:

public interface InterfaceTest {

	int a = 10;//全局變量默認強制是 public static final
	
	 public static void staticMethod() {  //靜態方法,JDK1.8下編譯通過
		 System.out.println("");
	 }
	 
	  int abstractMethod(); //抽象方法
	 
	 public static abstract class InnerClass{//抽象內部類,默認強制 public static
		 //......
	 }
	 
	 enum MyEnum{RED,BLUE,GRREN} //枚舉類,默認強制 public static
	 
	 interface InnerInteerface{ //嵌套接口,默認強制 public static
		 void aa();
	 }
}

class MyClass implements InterfaceTest{//實現上面的接口

	@Override
	public int abstractMethod() {//實現抽象方法
		
		return 0;
	}
}

注意一下,實現接口並不需要實現接口里面的內部抽象類成員、或者嵌套接口成員;

3. 接口的多繼承

  接口是可以繼承多個接口(在類中,是不允許多繼承的)。由於接口的實例成員方法都是抽象方法,所以多繼承不會對接口造成太大影響(不同父接口可以定義相同的方法),但還是有一點要注意的,多繼承接口時,從父接口繼承下來的方法,有相同的方法名,但不滿足方法重載的條件,就會沖突。如果出現這種情況,編譯將失敗,不允許多繼承。

interface A{
	void sameMethodA();
}

interface B{
	void sameMethodA();
	void sameMethodB(int a);//返回類型是void
}

interface C{
	int sameMethodB(int a);//返回類型是 int
}

interface D extends A,B{ //編譯通過,即使A,B定義了相同方法
	
}

interface E extends B,C{//編譯失敗
	
}

字接口D多繼承父接口A,B成功,但子接口E卻多繼承父接口B,C失敗,就是因為兩個接口定義的sameMethodB()除了返回類型外,方法名、參數列表都一樣,這不滿足方法重載,導致繼承時方法沖突。

如果非得要多繼承,Java的解決方案是使用 內部類或嵌套接口;

4. 接口與抽象類的區別

接口與抽象類的區別:

  • 抽象級別不一樣: 接口更加抽象,JDK1.8前只允許抽象方法,JDK1,8后才允許存在靜態方法;抽象類的抽象基本低,允許存在具體方法,甚至抽象類中可以沒有抽象方法。但有抽象方法的類就必須是抽象類;
  • 接口對成員的定義時的修飾符都有固定的限制,參考前面;抽象類定義成員與普通類是一樣的;
  • 接口中不允許定義初始化塊(靜態或實例),但抽象類允許定義這兩種初始化塊;
  • 接口中不能定義構造方法,但抽象類允許定義構造方法。

補充:抽象類中的抽象方法的訪問權限是不能是private

二、嵌套接口

嵌套接口: 就是定義在類或接口中的接口。

嵌套接口的修飾符限制:

  • 不論定義在接口,還是類中,嵌套接口默認強制是 static這意味着,嵌套接口是沒有局部的嵌套接口。
  • 接口定義在類中,可以使用四種訪問權限,定義在接口種,則只有public


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM