介面
介面的定義
-
介面是多個類的公共規范,就像是一種約定
-
介面是一種參考資料型別,最重要的內容就是其中的抽象方法
-
介面格式:
public interface 介面名稱 { 介面內容 } -
介面可包含的內容有:常量、抽象方法、默認方法、靜態方法、私有方法
介面使用方法
抽象方法
-
介面不能直接使用,必須有一個實作類來實作該介面
格式:
public class 實作類名稱 implements 介面名稱 -
介面的實作類必須覆寫重寫介面所有的抽象方法
-
創建實作類的物件才可以使用
-
注意:如果實作類沒有覆寫重寫介面中所有的抽象方法,那么這個實作類就是抽象類(用abstract修飾)
格式:
public abstract 回傳值型別 方法名稱 (引數串列);package character; //介面 public interface AD { //定義抽象方法,能夠進行物理攻擊 public abstract void physicalAttrack(); } //////////////////////////// package character; //實作類 public class ADHero implements AD { String name; //姓名 private float hp;//血量 private float armor; //護甲 int moveSpeed; //移動速度 //覆寫重寫介面的抽象方法 @Override public void physicalAttrack(){ System.out.println("進行物理攻擊"); } } ////////////////////////////// package character; public class ADHeroInterface { public static void main(String[] args) { //創建實作類的物件 ADHero hero = new ADHero(); hero.physicalAttrack(); } }
默認方法和靜態方法(Java 8)
-
介面中允許使用默認方法,主要用于解決介面升級問題
-
介面的默認方法可以通過實作類直接呼叫,也可以被實作類覆寫重寫
格式:
public default 回傳值型別 方法名稱 (引數串列) { 方法體 } -
介面中也可使用靜態方法,且不能通過實作類的物件來呼叫介面中的靜態方法,應直接通過介面名稱呼叫靜態方法
格式:
public static 回傳值型別 方法名稱 (引數串列) { 方法體 }package character; //介面 public interface AD { //定義抽象方法,能夠進行物理攻擊 public abstract void physicalAttrack(); //新添加一個方法,應為默認方法, //當為抽象方法時,實作類應該重新覆寫重寫,否則會報錯 public default void recieve(){ System.out.println("復活"); } //定義靜態方法 public static void methodStatic(){ System.out.println("這是靜態方法"); } } /////////////////////////////// package character; //實作類 public class ADHero implements AD { String name; //姓名 private float hp;//血量 private float armor; //護甲 int moveSpeed; //移動速度 //覆寫重寫介面的抽象方法 @Override public void physicalAttrack(){ System.out.println("進行物理攻擊"); } // //可以覆寫重寫默認方法 // @Override // public void recieve() { // System.out.println("覆寫重寫默認方法"); // } } //////////////////////////////// package character; public class ADHeroInterface { public static void main(String[] args) { //創建實作類的物件 ADHero hero = new ADHero(); hero.physicalAttrack(); hero.recieve();//可直接呼叫默認方法 AD.methodStatic();//直接通過介面呼叫靜態方法 } }
私有方法(Java 9)
-
可用私有方法解決介面中方法的重復代碼問題
-
普通私有方法解決多個默認方法之間重復代碼的問題
格式:
private 回傳值型別 方法名稱 (引數串列) { 方法體 } -
靜態私有方法解決多個靜態方法之間重復代碼的問題
格式:
private static 回傳值型別 方法名稱 (引數串列) { 方法體 }//介面 public interface AD { //定義抽象方法,能夠進行物理攻擊 public abstract void physicalAttrack(); //新添加一個方法,應為默認方法, // 當為抽象方法時,實作類應該重新覆寫重寫,否則會報錯 public default void recieve(int hp){ System.out.println("復活"); methodCommonRecieve(hp); } //定義靜態方法 public static void methodStatic(){ System.out.println("這是靜態方法"); methodCommonStatic(); } //普通私有方法 private void methodCommonRecieve(int hp){ System.out.println("加血:" + hp); } //靜態私有方法 private static void methodCommonStatic(){ System.out.println("AAAAA"); } }
介面常量
-
介面中的常量需用
public static final三個關鍵字修飾例如:
public static final int NUM_OF_HP = 10; -
介面中的常量必須進行賦值
-
介面常量的名稱使用完全大寫的字母,用下劃線分隔
繼承多個介面
-
介面無靜態代碼塊或者構造方法
-
一個類的直接父類是唯一的,但是一個類可以同時實作多個介面
格式:
public class 實作類名稱 implements 介面1, 介面2-
如果實作類所實作的多個介面中存在重復的抽象方法,只需要覆寫重寫一次
-
如果實作類所實作的多個介面中存在重復的默認方法,那么實作類一定要對沖突的默認方法覆寫重寫
-
-
注意:如果一個類的直接父類的方法和介面中的默認方法產生沖突,優先呼叫父類中的方法,即繼承優先于介面
-
一個介面可以繼承多個介面
格式:
public interface 介面3 extends 介面1, 介面2- 如果多個父介面中存在重復的抽象方法,沒關系
- 如果多個父介面中存在重復的默認方法,那么子介面必須對默認方法覆寫重寫
package character2; public interface AD { public abstract void attrack(); public default void method(){ System.out.println("這是物理攻擊英雄"); } } //////////////////////////////// package character2; public interface AP { public abstract void attrack(); public default void method(){ System.out.println("這是魔法攻擊英雄"); } } ///////////////////////////////// package character2; public interface ADAPHero extends AD, AP { //重復的抽象方法不需要覆寫重寫 //重復的默認方法需要在子介面覆寫重寫 @Override default void method() { System.out.println("這是進行物理攻擊和魔法攻擊的英雄"); } } ///////////////////////////////// package character2; public class Hero implements ADAPHero { //重復的抽象方法在實作類需要覆寫重寫 @Override public void attrack() { System.out.println("抽象方法,物理魔法攻擊"); } public static void main(String[] args) { Hero hero = new Hero(); hero.attrack(); hero.method(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/176245.html
標籤:Java
上一篇:Mybatis 的連接池技術
