java中的多重继承问题
据说Java不支持多重继承,但可以实现多个接口。因此,对于下面的代码段,将实现哪个show()方法java中的多重继承问题,java,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 } }
public interface I1{
public void show();
}
public interface I2{
public void show();
}
class mine implements I1, I2{
@override
public void show(){
//do something
}
}
我的问题是如何知道被重写的show()方法
我的问题是如何知道被重写的show()方法
你无法区分这一点。show()
方法只有一个实现,可以通过任一接口调用
我的问题是如何知道被重写的show()方法
你无法区分这一点。
show()
方法只有一个实现,可以通过任一接口调用。因为接口没有方法定义。覆盖哪个接口的show方法无关紧要
如果一个类型实现两个接口,并且每个接口定义一个
方法,则实际上只有一个签名
方法,它们是不可区分的。如果说这两种方法
如果存在冲突的返回类型,则这将是一个编译错误。
这是继承、方法重写、隐藏的一般规则,
和声明,并且不仅适用于可能的冲突
在2个继承的接口方法之间,但也在一个接口和
超级类方法,甚至只是由于
仿制药
As接口没有方法定义。覆盖哪个接口的show方法无关紧要 如果一个类型实现两个接口,并且每个接口定义一个 方法,则实际上只有一个签名 方法,它们是不可区分的。如果说这两种方法 如果存在冲突的返回类型,则这将是一个编译错误。 这是继承、方法重写、隐藏的一般规则, 和声明,并且不仅适用于可能的冲突 在2个继承的接口方法之间,但也在一个接口和 超级类方法,甚至只是由于 仿制药
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
的void show()
满足两个接口的方法声明,因此一切正常,控制台中出现两行代码(一行用于通过A引用的调用,一行用于B调用)
现在,假设你有
interface A { public void show(); }
interface B { public int show(); } <-- different return type!
class C implements A, B { public void show(); }
接口A{public void show();}
接口B{public int show()}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
的void show()
满足两个接口的方法声明,因此一切正常,控制台中出现两行代码(一行用于通过A引用的调用,一行用于B调用)
现在,假设你有
interface A { public void show(); }
interface B { public int show(); } <-- different return type!
class C implements A, B { public void show(); }
接口A{public void show();}
接口B{public int show();}很好。想想这两个接口恰好有相同的方法声明。没关系。试想一下,这两个接口恰好有相同的方法声明。它是否符合要求?(在Java SE 8中,将有一些规则覆盖默认方法实现。)@partlov,如果一个接口应该显示大象,而另一个接口应该在屏幕上显示窗口,这肯定很重要。例如,这就是为什么C#在这种情况下提供了一种分离实现的方法。它是否符合要求?(在Java SE 8中,将有一些规则覆盖默认方法实现。)@partlov,如果一个接口应该显示大象,而另一个接口应该在屏幕上显示窗口,这肯定很重要。这就是为什么C#在这种情况下提供了一种分离实现的方法。这个解释太棒了。这个解释太棒了。