黑马程序员技术交流社区
标题:
如果两个接口中的同名函数返回值不同,那么子类该如何实现?
[打印本页]
作者:
刘云龙
时间:
2013-3-6 14:56
标题:
如果两个接口中的同名函数返回值不同,那么子类该如何实现?
如果两个接口中的同名函数返回值不同,那么子类该如何实现?
<p>interface MyInter1
{
public abstract int show();//
}</p>
<p>interface MyInter2
{
public abstract void
show();//这里出现两个同名的show(),但是返回值不同
}</p>
<p>class MyInterImpl implements
MyInter1,MyInter2
{
//这里如何实现
}</p>
复制代码
作者:
张豪杰
时间:
2013-3-6 15:38
因为两个接口中的show方法,只是返回值不同,同时覆盖这两个show,则造成int show(),void show同时出现在类的成员位置,这样不能构成重载,也就编译失败了
在定义接口时,要避免出现定义这样的函数。这样的情况,和要实现两个接口中的同名函数类似
都可以用内部类来实现另一个接口
interface MyInter1
{
public abstract int show();
}
interface MyInter2
{
public abstract void show();
}
class MyInterImpl implements MyInter2 //因为两个接口中的show方法,只是返回值不同,同时覆盖这两个show,则造成
{ //int show(),void show同时出现在类的成员位置,这样不能构成重载,也就编译失败了
public void show(){
System.out.println("implements from MyInter2");
}
private class MyInner implements MyInter1{//建立一个私有内部类,用来实现第个接口
public int show(){
return 123;
}
}
public int show1(){ //定义一个方法用来获取第一个接口中show方法实现的结果
int a = new MyInner().show();
System.out.println("implemensts from MyInter1");
return a;
}
}
public class test{
public static void main(String[] arges){
MyInterImpl mi = new MyInterImpl();
mi.show();
mi.show1();
}
}
复制代码
作者:
lzw123451
时间:
2013-3-6 15:59
实际上,Java的语义规范里明确了,方法签名包含函数名和参数列表。
参数列表的位置及个数+函数名 共同决定了该函数是否是duplicated。
函数的返回值不是方法签名的一部分。 不能用返回值来判定函数是否duplicated.
也就是说java的内部接口不会出现上面的情况,而自定义接口也要自己定个相应的规范,例如第一个int show(int i )加个返回值。
interface MyInter1
{
public abstract int show(int i);
}
interface MyInter2
{
public abstract void show();
}
class MyInterImpl implements MyInter1, MyInter2
{
public int show(int i){ return 0;};
public void show(){};
}
复制代码
作者:
杨建聪
时间:
2013-3-6 17:17
这是不允许存在的,会编译失败,一定要避免这种情况的出现
作者:
amen0205
时间:
2013-3-6 23:01
因为子类对象调用该方法时会不知道该调用哪个一个返回值类型的方法,也不知道该返回什么,所以编译失败,而且java固定了 不能这么用 一个类的多个接口不允许出现不同返回值类型的同名函数(参数也相同的)
作者:
黄玉昆
时间:
2013-3-6 23:20
这个毕老师讲个,多看看视频啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2