interface详解
interface(接口)
1.interface的定義:
public interface 接口名{}
接口(interface)是抽象方法和常量值的定義的集合。
從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現。
2.interface的抽象方法:
寫抽象方法的幾種形式,可以省略public abstract 或public 或 abstract都可以。
public interface interfaceDemo01 {public abstract void show();void eat();abstract void sleep();public void study(); }如果要想實現接口,就要有一個實現類去實現,而且要實現它其中的抽象方法,并且要用implements關鍵字。形式為實現類名 implements 接口名。
public class test implements interfaceDemo01{@Overridepublic void show() {}@Overridepublic void eat() {}@Overridepublic void sleep() {}@Overridepublic void study() {} }3.interface的默認方法:
在接口中可以有默認方法,形式為 public default 返回值類型 方法名(){? }。
接口中默認方法的實現:
public interface interfaceDemo01 {public abstract void show();public default void play(){System.out.println("我在敲代碼");} }接口中默認方法的調用:需要創建對象
public class demo {public static void main(String[] args) {test t = new test();t.play();} }接口中默認方法還可以被實現類覆蓋重寫
public class test implements interfaceDemo01{@Overridepublic void show() {}@Overridepublic void play() {System.out.println("實現類重新接口默認方法");} }4.interface的靜態方法:
在接口中可以有靜態方法,形式為 public static 返回值類型 方法名(){ }。
接口中靜態方法的實現:
public interface interfaceDemo01 {public abstract void show();public default void play(){System.out.println("我在敲代碼");}public static void moYu(){System.out.println("上課摸魚");} }接口中靜態方法的調用:不需要創建對象,直接可以用 接口名.靜態方法名();即可
public class demo {public static void main(String[] args) {test t = new test();t.play();interfaceDemo01.moYu();} }接口中靜態方法不能被實現類重寫,因為它屬于接口獨有,并且在實現類中可以定義一個與接口中靜態方法方法名相同的靜態方法,則這個靜態方法歸實現類獨有。
5.interface的常量定義和使用:
在接口中定義常量,形式為public final 數據類型 變量名 = 數值;。這里面的public 和 final都可以省略掉。
public interface interfaceDemo01 {public int m = 100;public final int n = 10;int w = 100;public abstract void show();public default void play(){System.out.println("我在敲代碼");}public static void moYu(){System.out.println("上課摸魚");} } public class test implements interfaceDemo01{@Overridepublic void show() {System.out.println(m);System.out.println(n);System.out.println(w);}@Overridepublic void play() {System.out.println("實現類重新接口默認方法");}public static void moYu(){System.out.println("實現類獨有");} }6.interface之間的多繼承:
Java中的繼承都是單繼承的,就是說一個父類可以被多個子類繼承但是一個子類只能有一個父類。但是一個接口可以被不同實現類去實現,這就是我們說的Java中的多態的概念。下面我們再來說一下接口的多繼承的概念,就是說一個接口是可以繼承多個接口的。
一個實現類可以繼承多個接口,但要實現每個接口中的抽象方法。不過如果接口中存在相同的接口默認方法(也就是兩個接口中默認方法名相同),這就是接口默認方法沖突。這個解決辦法就是在實現類中覆蓋重寫該默認方法即可。
如果接口默認方法名和另一個接口的抽象方法同名,返回值類型也相同,這種沖突可以通過實現類覆蓋重寫該方法來解決問題。但是若返回值類型不相同則無法解決該問題,因為這純屬沒事閑的才這樣做。
7.繼承父類并實現多接口:
一個類既可以繼承父類也可以是很多接口的實現類。形式為:類名 extends 父類名 implements 接口名,接口名...
當父類的成員方法名和接口中的默認方法名相同時,返回值類型也相同,則優先繼承父類,即不顯式的實現接口也不會報錯。
當父類的成員方法名和接口中的抽象方法名相同時,返回值類型也相同,則優先繼承父類,即不顯式的實現接口也不會報錯。(這句話的意思就是因為子類繼承了父類中的成員方法相當與覆蓋重寫了接口中的抽象方法,所以子類中可以不實現該抽象方法,調用時直接調用父類中的該成員方法即可)。
public class Fu {public Fu() {}public void play(){System.out.println("我在玩");}public void s(){System.out.println("m");} } public interface interfaceDemo01 {public int m = 100;public final int n = 10;int w = 100;public abstract void show();public default void play(){System.out.println("我在敲代碼");}public static void moYu(){System.out.println("上課摸魚");} } public interface interfaceDemo02 {public abstract void show();void s(); } public class test extends Fu implements interfaceDemo01,interfaceDemo02{@Overridepublic void show() {System.out.println(m);System.out.println(n);System.out.println(w);}public static void moYu(){System.out.println("實現類獨有");} } public class demo {public static void main(String[] args) {test t = new test();t.show();t.play();t.s();interfaceDemo01.moYu();test.moYu();} }輸出結果:
100
10
100
我在玩
m
上課摸魚
實現類獨有
總結
以上是生活随笔為你收集整理的interface详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络的三大功能,计算机网络主要功能
- 下一篇: 含辞未吐,声若幽兰,史上最强免费人工智能