看马士兵的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()方法,这样就能消除重名的错误了