【问题标题】:Implementing multiple inheritence using two interfaces having same methods使用具有相同方法的两个接口实现多重继承
【发布时间】:2012-03-19 10:03:04
【问题描述】:

虽然我试图访问在两个接口中给出的相同方法,但我理解多重继承的概念。示例:-

interface Interface1{ 
       int show();
       void display();
}

interface Interface2 {
int show();
void display();
}

class Impl implements Interface1, Interface2 {
       // how to override show() and display() methods such that 
       // i could access both the interfaces
}

【问题讨论】:

    标签: java oop multiple-inheritance


    【解决方案1】:

    由于接口没有方法定义。您覆盖哪个接口的 show 方法并不重要。

    【讨论】:

    • 嗨,我的回答和我在一次采访中被问到的一样,但是当他问我如果你必须编写 2 种方法更改返回类型或者只是给我功能同一个类中的两个方法,所以这里有点混淆.....
    • 如果您要更改返回类型,那么这取决于您在实现 2 接口的类中指定的返回类型,并将覆盖该接口中的方法,该接口与您定义的签名相同。所以如果 interface1 有 int show(); inerface2 有 char show();并且您正在类中编写 int show() 它将来自 interface1,如果您同时编写两者,那么它将来自两个接口。
    • 所以我可以从同一个班级打电话给我吗?所以现在我再次检查你所说的.....
    • 但是这会导致编译错误你能提供一个例子吗??
    • @Rahul Borkar 你能提供一个例子来支持你的观点,因为它对我来说似乎是有效的.....但是在编译时它会给出错误..
    【解决方案2】:

    您可以使用相同的方法实现 2 个接口。不会出现编译错误。 但是当你这样做时

    class A implements Interface1, Interface2
    {
    }
    

    然后Interface的类似方法将被Interface2的Methods覆盖。 因此,在您的 A 类中,只有一种方法,而不是两种。

    如果我错了,请纠正我。

    【讨论】:

    • 如果你必须编写 2 个方法来更改返回类型,或者只是为了在同一个类中提供两个方法的功能,所以这里有点困惑
    【解决方案3】:
    Interface1 i1 = new impl();
    Interface2 i2 = new impl();
    i1.show();
    i2.show();
    

    在这两种情况下,您似乎都在调用两个不同接口的两个不同方法。但是由于接口方法没有主体部分,所以会执行 Impl 类的相同方法。

    因此,通过哪个引用调用这些方法并不重要。

    【讨论】:

    • 您好,我的回答与我在一次采访中被问到的一样,但是当问我如果你必须编写 2 种方法更改返回类型或者只是给我功能同一个类中的两个方法,所以这里有点混淆.....
    • 嗯嗯,对了,但是我使用两个具有相同方法的接口有什么用.....而不是使用一个不需要多重继承的接口。
    • @karansingh1487 在某些情况下,您可能有两个签名相同但工作方式不同的方法。但在这种特定情况下,我认为没有必要有两个接口。如果我在某个地方错了,请告诉我我的错误。
    【解决方案4】:

    接口所做的只是声明 X 方法将存在于一个类中。如果两个接口定义了相同的方法,并且一个类实现了这两个接口,那么该类将只有一个方法。该方法将满足两个接口的要求。没有办法在一个类中定义相同的方法签名两次,以便每个接口有不同的实现。

    换句话说,在下面的代码中,对 show 的两个调用都执行相同的方法:

    Impl impl = new Impl();
    ((Interface1) impl).show();
    ((Interface2) impl).show();
    

    【讨论】:

    • 嗨,我的回答和我在一次采访中被问到的一样,但是当他问我如果你必须编写 2 种方法更改返回类型或者只是给我功能同一个类中的两个方法,所以这里有点混淆.....
    【解决方案5】:

    接口只提供契约或者你可以说限制来实现一些特定的东西。如果两个接口提供相同的合同(如您的情况),则实施类将仅实现一个合同(因为两个合同之间没有区别)。

    【讨论】:

    • 嗨,我的回答和我在一次采访中被问到的一样,但是当他问我如果你必须编写 2 种方法更改返回类型或者只是给我功能同一个类中的两个方法,所以这里有点混淆.....
    • @karansingh1487 Java 有一些限制。您不能以正常方式在具有不同返回类型的相同方法的实现中实现两个接口(直到它们是协变的)。如果你这样做,这个编译器会显示错误。
    • 嗯嗯,对了,但是我使用两个具有相同方法的接口有什么用.....而不是使用一个不需要多重继承的接口..
    • @karansingh1487 由于歧义(调用哪个方法??),java 不支持多重继承。
    • 那为什么说它是通过接口支持的呢?
    【解决方案6】:

    @RahulBorkar 我不认为这是正确的。如果您有两个具有相同签名但返回类型不同的接口,则根据您使用的引用获得一个。

    例如,如果您创建一个对象并放入 Instance1 引用,您将获得 Instance1 方法。如果你取同一个对象,把它放在一个 Instance2 引用中,你会得到 Instance2 方法。至少,这似乎适用于类。它不是基于返回类型,而是基于调用类型。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 2020-08-12
      • 1970-01-01
      • 2011-01-23
      • 2011-08-13
      • 2013-07-03
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多