关于java中的多重继承的问题

时间:2013-04-05 13:53:20

标签: java

据说Java不支持多重继承,但可以实现多个接口。因此,在下面的片段的情况下,将实现show()方法。

public interface I1{

   public void show();

}


public interface I2{

   public void show();

}


class mine implements I1, I2{

    @override
    public void show(){

       //do something

    }
}

我的问题是如何知道被覆盖的show()方法。

4 个答案:

答案 0 :(得分:3)

  

我的问题是如何知道被覆盖的show()方法。

你无法区分这一点。 show()方法只有一个实现,可以通过任一接口调用。

答案 1 :(得分:3)

Java没有等同于C#的public void A.show(),因为它不会让接口以这种方式发生冲突。如果实现两个声明具有相同名称和相同参数类型的方法的接口,它们也具有相同的返回类型,或者Java甚至不会编译代码。一旦返回类型相同,实现一个或另一个的类实际上同时实现两者,因为签名满足两个接口的要求。

当然,如果你想验证......

public class Example {
    interface A { public void show(); }
    interface B { public void show(); }

    class C implements A, B {
        public void show() { System.out.println("show()ing"); }
    }

    public static void main(String[] args) {
        C c = new C();

        A a = c;
        a.show();  // does something, trust me :P

        B b = c;
        b.show();  // does something too
    }
}

C的{​​{1}}满足两个接口的方法声明,所以一切顺利,控制台中出现两行(一个用于通过A引用调用,一个用于B调用)。

现在,说你有

void show()

您尝试实施哪种方法有点明显。但这不起作用 - 而且不能,因为Java不会让这两个接口的方法存在于同一个类中。

现在,最后一个例子。

interface A { public void show(); }
interface B { public int show(); }  <-- different return type!

class C implements A, B { public void show(); }

这很好。由于两个接口声明只共享一个名称而不是arg类型,因此Java允许它们在interface A { public void show(); } interface B { public int show(int); } <-- different return type! class C implements A, B { public void show() { System.out.println("Showing..."); } public int show(int i) { System.out.println(i); } } 中共存。但它还要求您为每个接口实现一种方法。

答案 2 :(得分:2)

由于接口没有方法定义。你覆盖哪个界面的show方法无关紧要。

Implemeting 2 interfaces in a class with same method.Which interface method is overridden?

  

如果一个类型实现两个接口,并且每个接口定义一个   具有相同签名的方法,则实际上只有一个   方法,它们是无法区分的。比方说,如果是这两种方法   有冲突的返回类型,那么它将是一个编译错误。   这是继承,方法覆盖,隐藏的一般规则,   和声明,不仅适用于可能的冲突   2个继承的接口方法之间,还有一个接口和一个   超类方法,甚至只是由于类型擦除引起的冲突   泛型。

答案 3 :(得分:0)

没关系。想想这两个接口碰巧有相同的方法声明。