一個類實現具有同名方法的兩個接口

看馬士兵的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()方法,這樣就能消除重名的錯誤了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章