A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如果两个接口中的同名函数返回值不同,那么子类该如何实现?

  1. <p>interface MyInter1
  2. {
  3. public abstract int show();//
  4. }</p>
  5. <p>interface MyInter2
  6. {
  7. public abstract void
  8. show();//这里出现两个同名的show(),但是返回值不同
  9. }</p>
  10. <p>class MyInterImpl implements
  11. MyInter1,MyInter2
  12. {
  13. //这里如何实现
  14. }</p>
复制代码

5 个回复

倒序浏览
因为两个接口中的show方法,只是返回值不同,同时覆盖这两个show,则造成int show(),void show同时出现在类的成员位置,这样不能构成重载,也就编译失败了
在定义接口时,要避免出现定义这样的函数。这样的情况,和要实现两个接口中的同名函数类似
都可以用内部类来实现另一个接口
  1. interface MyInter1
  2. {
  3. public abstract int show();
  4. }


  5. interface MyInter2
  6. {
  7. public abstract void show();
  8. }


  9. class MyInterImpl implements MyInter2  //因为两个接口中的show方法,只是返回值不同,同时覆盖这两个show,则造成
  10. {                                                                                //int show(),void show同时出现在类的成员位置,这样不能构成重载,也就编译失败了
  11.         public void show(){
  12.                 System.out.println("implements from MyInter2");
  13.         }
  14.        
  15.         private class MyInner implements MyInter1{//建立一个私有内部类,用来实现第个接口
  16.                 public int show(){
  17.                        
  18.                         return 123;
  19.                 }
  20.         }
  21.        
  22.         public int show1(){   //定义一个方法用来获取第一个接口中show方法实现的结果
  23.                 int a = new MyInner().show();
  24.                 System.out.println("implemensts from MyInter1");
  25.                 return a;
  26.         }
  27. }
  28. public class test{
  29.         public static void main(String[] arges){
  30.                 MyInterImpl mi = new MyInterImpl();
  31.                 mi.show();
  32.                 mi.show1();
  33.         }
  34. }
复制代码
回复 使用道具 举报
实际上,Java的语义规范里明确了,方法签名包含函数名和参数列表。

参数列表的位置及个数+函数名 共同决定了该函数是否是duplicated。

函数的返回值不是方法签名的一部分。 不能用返回值来判定函数是否duplicated.

也就是说java的内部接口不会出现上面的情况,而自定义接口也要自己定个相应的规范,例如第一个int show(int i )加个返回值。
  1. interface MyInter1

  2. {
  3.         public abstract int show(int i);

  4. }

  5. interface MyInter2

  6. {

  7.    public abstract void show();

  8. }

  9. class MyInterImpl implements MyInter1, MyInter2

  10. {
  11.         public int show(int i){ return 0;};
  12.         public void show(){};
  13.    

  14. }
复制代码
回复 使用道具 举报
这是不允许存在的,会编译失败,一定要避免这种情况的出现
回复 使用道具 举报
因为子类对象调用该方法时会不知道该调用哪个一个返回值类型的方法,也不知道该返回什么,所以编译失败,而且java固定了 不能这么用  一个类的多个接口不允许出现不同返回值类型的同名函数(参数也相同的)
回复 使用道具 举报
这个毕老师讲个,多看看视频啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马