查询Java中的接口

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中的一个缺陷吗?我认为这是我们不允许扩展多个类的主要原因之一,那么当这个问题仍然存在时,为什么我们允许实现多个接口呢?

use*_*572 7

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)