看馬士兵的JAVA課程想到的問題,做個筆記。
interface singer{
public void eat();
}
interface dancer{
public void eat();
}
class Person implements singer,dancer{
@Override
public void eat() {
System.out.println("eat");
}
}
public class Test{
public static void main(String[] args) {
singer s=new Person();
dancer d=new Person();
s.eat();
d.eat();
}
}
這樣寫可以運行,沒有任何問題。說明eat方法實現了兩個接口裏面的抽象方法。
輸出結果:eat
eat
interface singer{
public int eat();//返回值改變了
}
interface dancer{
public void eat();
}
class Person implements singer,dancer{
@Override
public void eat() {
System.out.println("eat");
}
public int eat() {
System.out.println("eat");
}
}
這樣寫person類裏面都重寫了兩個接口的eat函數,但是person引用調用eat函數時會由於重名(返回值不同而形參相同)而無法分辨。所以編譯直接出錯。當然,兩個函數不重名而是重載了就沒有任何問題(即兩個方法裏面具有不同的形參)。
解決上述問題也有一種方法,使用內部類。外部類(包裝類)和內部類個implements一個eat()方法,這樣就能消除重名的錯誤了