ano*_*428 9 java overriding interface object-oriented-analysis
可以说我有两个接口A和接口B:
public interface A {
public int data();
}
public interface B {
public char data();
}
Run Code Online (Sandbox Code Playgroud)
接口A有一个方法public int data(),接口B有一个方法public char data().
当我在某个C类中实现接口A和B时,编译器给出了一个错误.这是java中的一个缺陷吗?我认为这是我们不允许扩展多个类的主要原因之一,那么当这个问题仍然存在时,为什么我们允许实现多个接口呢?
Java编程语言支持重载方法,Java可以区分具有不同方法签名的方法.这意味着如果类中的方法具有不同的参数列表,则它们可以具有相同的名称.
也,
您不能声明多个具有相同名称和相同数量和类型的参数的方法,因为编译器无法区分它们.
在区分方法时,编译器不考虑返回类型,因此即使它们具有不同的返回类型,也不能使用相同的签名声明两个方法.
这两个实现的方法共享一个公共方法签名(即data()),因此,编译器无法区分这两个方法并且将使该单个方法满足两个接口契约.
例如,
public class Foo implements IFoo, IBar{
public static void main(String[] args) {
Foo foo = new Foo();
((IFoo) foo).print();
((IBar) foo).print();
}
@Override
public void print() {
System.out.println("Hello, World!");
}
}
public interface IBar {
void print();
}
public interface IFoo {
void print();
}
Run Code Online (Sandbox Code Playgroud)
哪个会输出,
Hello, World!
Hello, World!
Run Code Online (Sandbox Code Playgroud)