初學者容易把繼承接口和實現接口搞混,專門整理一下,順便簡單介紹一下interface、implements關鍵字。
繼承接口和實現接口的區別、接口的特點
- 繼承接口是說的只有接口才可以繼承接口,是接口與接口間的。實現接口是說的接口與類之間,類不可以繼承接口,但類可以實現接口。
- 一個接口可以繼承一個或多個接口。 接口繼承接口可以不實現父接口中的方法,可以聲明自己的新方法
public interface InterfaceA extends InterfaceB,InterfaceC{}
- 一個實現類可以實現一個或者多個接口。 類實現接口時,一定要實現接口中聲明的方法,如果接口中沒有定義抽象方法則不需要,但是要注意,類實現了一個接口A,如果B是A的父接口,且B中有抽象方法,則該類必須實現A和B中的所有抽象方法。
public class InterfaceImpl implements InterfaceA,InterfaceB{}
- 一個子類可以繼承一個父類的同時實現一個或者多個接口(一個類只能繼承一個類,不能繼承多個類)
public class Zi extends Fu implements InterfaceA,InterfaceB{}
- 抽象方法只能定義在抽象類中,抽象類實現接口,可以不實現接口中的抽象方法。
接口和抽象類的區別
相同點
- 都位于繼承體系的頂端,用于被其他類實現或者繼承
- 都不能new
- 都包含抽象方法,其子類或者實現類都必須重寫這些抽象方法
不同點
- 抽象類:一般作為父類使用,可以有成員變量,構造,成員方法,抽象方法等
- 接口:成員單一,一般抽取接口,抽取的都是方法,視為功能的大集合
- 類不能多繼承,但是接口可以多繼承
下面來詳細介紹下接口及其中的關鍵字
接口
接口是一個引用數據類型,是一種標準規則,用關鍵字interface
來實現。
interface
下面是定義接口
public interface 接口名{ }
implements
implements是類用來實現接口的關鍵字
使用:
- 實現類實現接口
- 重寫接口中的抽象方法
- 創建實現類對象(接口不能直接new對象)
- 調用重寫的方法
public interface Animal{public abstract void eat();
}
public class Tiger implements Animal{@Overridepublic void eat() {System.out.println("老虎吃東西");}
}
接口中定義的成員
一、成員變量
final代表最終的,被它修飾的變量,不能二次賦值,可以視為常量
public static final 數據類型 變量名 = 值
特點
1、不寫public static final 默認也有
2、接口名直接調用
3、被static final修飾的成員變量需要手動賦值
4、習慣上我們會將static final修飾的成員變量名大寫
public interface Animal{public static final int NUM1 = 666;int NUM2 = 666;//不寫public static final 默認也有
}
public class Test {public static void main(String[] args) {System.out.println(Animal.NUM1);}
}
二、抽象方法
格式:
public abstract 返回值類型 方法名(形參);
使用:
- 定義實現類,實現接口
public interface Animal{public abstract void eat();String drink(); //不寫public abstract 默認也有
}
- 重寫抽象方法
public class Tiger implements Animal{@Overridepublic void eat() {System.out.println("老虎吃東西");}@Overridepublic String close() {return "老虎喝水";}
}
- 創建實現類對象,調用重寫的方法
public class Test01 {public static void main(String[] args) {Mouse tiger= new Tiger();tiger.eat();String result = tiger.drink();System.out.println("result = " + result);}
}
三、默認方法
格式:
public default 返回值類型 方法名(形參){方法體return 結果}
使用:
- 定義實現類,實現接口
public interface Animal {//默認方法public default void methodDef(){System.out.println("我是默認方法");}
}
- 默認方法重寫,可以不重寫
public class Tiger implements Animal{@Overridepublic void methodDef(){System.out.println("我是默認方法");}
}
- 創建實現類對象,調用默認方法
public class Test {public static void main(String[] args) {Mouse tiger = new Tiger();tiger.methodDef();}
}
四、靜態方法
格式:
public static 返回值類型 方法名(形參){方法體return 結果
}
使用:接口名直接調用
public interface Animal {//靜態方法public static void methodStatic(){System.out.println("我是靜態方法");}
}
public class Test {public static void main(String[] args) {Animal.methodStatic();}
}
默認方法和靜態方法可以作為臨時加的一個小功能來使用。