介面是類別的藍圖,和抽象類別有點相似,以下是介面的特性:
implements
關鍵字)。implements
後的多個interface
之間加上,
)。default
或 static
關鍵字),而不僅限於抽象方法。default
方法:當希望介面提供一個預設的行為給實作該介面的類別時,可以使用 default
關鍵字來定義具體的方法,實作的類別可以選擇是否要覆寫這個方法。static
方法:static
關鍵字用來宣告靜態方法,static
屬於介面本身,不能被實作的類別覆寫,只能透過介面名稱來調用。public static final
,也就是常數,Java 會隱式地將介面中的變數設為這三個修飾詞,所以即使不顯式加上,它們仍然是 public static final
。範例:
public interface Animal {
void eat(); // 抽象方法
void sleep(); // 抽象方法
static void sound() { // 靜態方法
System.out.println("Animal makes a sound.");
}
}
public class Dog implements Animal {
@Override
public void eat() { // 將抽象方法具體實現
System.out.println("Dog is eating.");
}
@Override
public void sleep() { // 將抽象方法具體實現
System.out.println("Dog is sleeping.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 輸出: Dog is eating.
dog.sleep(); // 輸出: Dog is sleeping.
// 透過介面調用靜態方法
Animal.sound(); // 輸出: Animal makes a sound.
}
}
延續上述範例,讓類別多重實現介面
public interface Flyable {
void fly();
}
public class Bird implements Animal, Flyable {
@Override
public void eat() {
System.out.println("Bird is eating.");
}
@Override
public void sleep() {
System.out.println("Bird is sleeping.");
}
@Override
public void fly() {
System.out.println("Bird is flying.");
}
}
何時使用抽象類別,何時使用介面?
implements
)多個介面。