interface
接口, 實際上就是一個 純的 抽象類,
我們知道 抽象類中, 可以定義 抽象方法(只有方法的 原型設計, 沒有方法體實現的 方法)
接口中所有的方法, 都只能是 抽象方法, 不能有 方法體的實現
使用接口, 可以變通一下, 實現多繼承
我們知道, 繼承一個類的時候, 我們既繼承了 它的設計, 也繼承了 它的方法體實現
那么實現一個接口, 就只繼承了它的設計
Java不支持類的多繼承
interface Shape2D {
final double pi = 3.14; // 數據成員一定要初始化
public abstract double area(); // 抽象方法
}
final, public abstract關鍵字, 可以省略
interface Shape2D {
double pi = 3.14;
double area();
}
由於 接口 里面只有 方法的原型聲明, 沒有方法體的實現
所以, 和抽象類一樣, 接口也是不能產生實例的, 不能實例化
實現接口
public class 類名稱 implements 接口名稱 {
// 在類體中實現接口的方法
// 本類聲明的更多變量 和 方法
}
注意:
1, 必須實現接口中的 所有方法
2, 來自接口的方法 必須聲明成 public
class Circle implements Shape2D {
double radius;
public Circle(double r) {
radius = r;
}
@Override
public double area() {
return (pi * radius * radius);
}
}
class Rectangle implements Shape2D {
int width, height;
public Rectangle(int w, int h) {
width = w;
height = h;
}
@Override
public double area() {
return (width * height);
}
}
測試類
public class InterfaceTest {
public static void main(String[] args) {
Rectangle rect = new Rectangle(5, 6);
System.out.println("Area of rect = " + rect.area());
Circle cir = new Circle(2.0);
System.out.println("Area of cir = " + cir.area());
}
}
jdk7及以前, 只能定義 全局常量 和 抽象方法
全局常量: public static final 的, 但是書寫時, 可以省略不寫
抽象方法: public abstract的
jdk8, 除了定義 全局常量 和 抽象方法 之外, 還可以定義 靜態方法, 默認方法
參考文獻
[1] https://www.bilibili.com/video/BV1Kb411W75N?p=359
[2] https://www.xuetangx.com/learn/THU08091000251/THU08091000251/7753170/video/12654614
[3] https://www.xuetangx.com/learn/THU08091000251/THU08091000251/7753170/video/12654615
參考鏈接