在Java中
所有被宣告在interface中的method都是public abstract
所以interface中的method才不需要特地標上修飾符與abstract
而如何實現此設計
就由class去 implements 此interface以實際override(重寫)
在interface中宣告的variable,預設都是final且static的
所以必須要賦予初始值
如下程式部分,假如Animal 和 Human 兩個interface都有eat method
那麼class Japanese implements時重寫的eat method 會直接override兩者的eat 行為
所以不會有像extends 繼承時出現不知道該參照誰的method的狀況發生
interface Animal {
void canSpeak(boolean can);
void eat();
}
interface Human {
void speak();
void eat();
}
class Japanese implements Human, Animal {
@Override
public void canSpeak(boolean can) {
System.out.println(can ? "can speak" : "can not speak");
}
@Override
public void speak() {
System.out.println("speak in japanese");
}
@Override
public void eat() {
System.out.println("eat something");
}
}
public class Demo {
public static void main(String[] args) {
Japanese human = new Japanese();
human.canSpeak(true); // can speak
human.speak(); // speak in japanese
human.eat(); // eat something
Japanese human2 = new Japanese();
human.canSpeak(false); // can not speak
human.speak(); // speak in japanese
human.eat(); // eat something
}
}
interface A 繼承 interface B
那麼 class C implements A時,就需要將interface A和B的所有method都重寫
不然就是在class C 前方加上 abstract關鍵字,表示我有method不想重寫(我並不完整)