interface介面的使用簡述(一)
阿新 • • 發佈:2022-03-03
1、介面使用interface關鍵字描述定義
2、Java中,介面和類是並列的結構
3、如何定義介面:定義介面中的成員
3.1 JDK7及以前:只能定義全域性常量和抽象方法
》全域性常量:public static final的,但是書寫時可以省略;
》抽象方法:public abstract的
3.2 JDK8:除了定義全域性常量和抽象方法之外,還可以定義靜態方法、預設方法。
4、介面中不能定義構造器:意味著介面不可以例項化
5、java開發中,通過類來實現(implements)介面使用:如果實現類覆蓋了介面中的所有抽象方法,則此實現類就可以例項化;如果沒有覆蓋所有抽象方法,則此實現類仍為一個抽象類
6、java類可以實現多個介面 ----多實現彌補了java單繼承性的侷限性,格式:class A extends B implements C,D,E
7、介面與介面之間可以繼承,並且可以多繼承
8、介面具體的使用,體現多型性:見示例程式碼
9、介面,實際上可以看作是一種規範
補充-面試題:抽象類與介面有哪些異同?
//面試題1:當子類繼承了同名的父類成員和介面成員時,如何區分使用 interface A{ int x=0; } class B{ int x =1; } class C extends B implements A{ public void pX() { // System.out.println(x);//編譯不通過,提示錯誤,x模糊 System.out.println(super.x);//1 System.out.println(A.x);//0 } public static void main(String[] args) { new C().pX(); } } //面試題2 interface Playable{ void play(); } interface Bounceable{ void play(); } interface Rollable extends Playable,Bounceable{ Ball ball = new Ball("pingpang"); } class Ball implements Rollable{ private String name; public String getName() { return this.name; } public Ball(String name){ this.name = name; } public void play() {//重寫了兩個父介面中的play方法 // ball = new Ball("football"); 介面中定義了全域性常量ball,不可以更改。 // System.out.println(ball.getName()); } }
public class InterfaceTest1 { public static void main(String[] args) { System.out.println(Flyable.MAX_SPEED); System.out.println(Flyable.MIN_SPEED); Plane p1 = new Plane(); p1.fly(); System.out.println(Plane.MAX_SPEED); } } interface Attackable{ void attack(); }
interface Flyable{ //全域性常量 public static final int MAX_SPEED = 7900;//第一宇宙速度 int MIN_SPEED=1;//省略了public static final //抽象方法 public abstract void fly(); void stop();//省略了public abstract } class Plane extends Object implements Flyable{
@Override public void fly() { System.out.println("通過引擎起飛"); } @Override public void stop() { System.out.println("通過駕駛員停止"); } } // 抽象類實現介面 abstract class Kite implements Flyable{ @Override public void fly() { } } //類Bullet實現多個介面 class Bullet implements Flyable,Attackable,CC{ @Override public void attack() { } @Override public void fly() { } @Override public void stop() { } @Override public void method1() { } @Override public void method2() { } } interface AA{ void method1(); } interface BB{ void method2(); } //介面可以繼承,並可以繼承多個 interface CC extends AA,BB{
}