黑马程序员技术交流社区

标题: 请高手指教 [打印本页]

作者: 邵彩华    时间: 2013-3-30 23:55
标题: 请高手指教
本帖最后由 邵彩华 于 2013-4-1 19:01 编辑

当一个类同时实现两个接口A和B,即形如class C implements A,B { },如果接口A和B之中有相同的方法,参数也相同,但返回值类型不同,问在class C中该如何实现?
作者: 郭兴业    时间: 2013-3-31 00:06
新手,学习了,正好看到这了,也有此困惑,求解
作者: 郭沐昌    时间: 2013-3-31 00:14
“interface”(接口)关键字使抽象的概念更深入了一层。我们可将其想象为一个“纯”抽象类。它允许创
建者规定一个类的基本形式:方法名、自变量列表以及返回类型,但不规定方法主体。接口也包含了基本数
据类型的数据成员,但它们都默认为static 和final。接口只提供一种形式,并不提供实施的细节。
接口这样描述自己:“对于实现我的所有类,看起来都应该象我现在这个样子”。因此,采用了一个特定接
口的所有代码都知道对于那个接口可能会调用什么方法。这便是接口的全部含义。所以我们常把接口用于建
立类和类之间的一个“协议”。有些面向对象的程序设计语言采用了一个名为“protocol”(协议)的关键
字,它做的便是与接口相同的事情。
为创建一个接口,请使用interface 关键字,而不要用 class。与类相似,我们可在 interface关键字的前
面增加一个 public关键字(但只有接口定义于同名的一个文件内);或者将其省略,营造一种“友好的”状
态。
为了生成与一个特定的接口(或一组接口)相符的类,要使用 implements(实现)关键字。我们要表达的意
思是“接口看起来就象那个样子,这儿是它具体的工作细节”。除这些之外,我们其他的工作都与继承极为
相似。
作者: tshch1989    时间: 2013-3-31 00:22
按照java的基础语法分析的话,应该是没有提供能实现的关键字什么的;
作者: 山西_李帅    时间: 2013-3-31 00:27
interface A
{
        public void aaa();
}

interface B
{
        public void bbb();
}

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

一样的。
作者: 山西_李帅    时间: 2013-3-31 00:29
interface A
{
        public void aaa();
}

interface B
{
        public String bbb();
}

class C implements A,B
{
        public void aaa(){
                System.out.println("aaa");
        }
        public String bbb(){
                //System.out.println("bbb");
                return("bbb");
        }
}
作者: xyh19    时间: 2013-3-31 10:10
在不同接口中使用相同的方法名通常会造成代码可读性的混乱,应该尽量避免这种情况。这也是编程人员需要注意的东西。
别想着怎么弄好方法这样实现,即便实现了电脑可以区别了,给别人带来将是不便,
咱们学习各种技术的目的是为了更简洁、更方便的用于实际,而不是给其他程序员带来麻烦,这样就违背了技术的本质了。

作者: 赵喜平    时间: 2013-3-31 10:11
interface A
{
        String add();
}

interface B
{
        int add();
}

class C implements A,B
{

       
        public String add() {}
               
        public int add(){}
       
       
}
你的意思是这样吧,这样是行不通的,同时继承的两个接口中的方法是不可以方法名相同而返回值不同,这是错误的
作者: 米腾达    时间: 2013-3-31 10:27
本帖最后由 米腾达 于 2013-3-31 10:32 编辑

同一个类中,若是方法名相同,只有重载这种情况,但是方法重载要求方法的参数列表不同。像你说的这种情况下,如果像下面这样写一定不能通过编译通过
  1. interface InterA
  2. {
  3.         public int show();
  4. }

  5. interface InterB
  6. {
  7.         public String show();
  8. }

  9. class C implements InterA,InterB
  10. {
  11.         public int show(){
  12.                 return 1;
  13.         }
  14.         public String show(){
  15.                 return "InterB";
  16.         }
  17. }
复制代码
若是一定要实现两个接口中的同名方法的话,可以用下面的方法


  1. interface InterA
  2. {
  3.         int show();
  4. }

  5. interface InterB
  6. {
  7.         String show();
  8. }

  9. class C implements InterA
  10. {
  11.         private InterB bb = new InterB(){
  12.             public String show(){
  13.                 return "InterB";
  14.             }
  15.          };
  16.         public int show(){
  17.                return 1;
  18.         }
  19.        public InterB getInterB(){
  20.             return bb;
  21.        }
  22. public static void main(String[] args){
  23.     C cc = new C();
  24.     System.out.println(cc.show());
  25.     System.out.println(cc.getInterB().show());
  26. }
  27. }
复制代码

作者: 王俊杰    时间: 2013-3-31 12:49
这个问题我发过一次帖
请参考。希望给你一定的启发。
肖明凯 提出的用内部类的方案是比较不错的。

http://bbs.itheima.com/forum.php ... mp;page=1#pid241818

祝共同进步!!
作者: 陈丽莉    时间: 2013-3-31 18:16
若还有问题,继续追问;没有的话,请将帖子分类改成【已解决】~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2