当前位置:首页 » 多媒体相关

一个关于接口实现多重继承的问题,???


有一个a类,一个b类,现想自己写一个c类来继承a、b的方法,在c++中可以直接实现  
  多重继承,在java中要用到interface实现,但在实现时,要在c类中全部重写接口的方法  
  。这不是违背了oop重复利用代码的原则吗?如果a或b类中的一个方法我不知它的方法体  
  如何自己写呀,本人初学java对接口间接实现多继承有些迷茫。望高手指点。

推荐阅读

  • 30万台Xbox 360将在欧洲亮相(图) [详细内容]
  • 联想Q3营收311亿港元 手机销量超过190万部 [详细内容]
  • 联想今日发布第三季财报 券商预测增31%-47% [详细内容]
  • 气宇轩昂 1099 希仕X1300PRO IceQ强势登陆 [详细内容]
  • 自我改造个性 让QD的QQ也拥有彩铃声 [详细内容]
  • 网游新三国策Ⅳ傍奥运被查 [详细内容]
  • 韩系经典MP3超值 尚音Si-200大跌300元 [详细内容]
  • 网友回答:
    网友:jasoncao

    接口最重要的功能就是多态性。

    网友:meteor135

    如果那个a类和b类是可以修改的就好办了。  
      你完全可以重新设计一下这两个类。  
      一个方法就是分别让他们实现各自的方法接口interfacea和interfaceb,这两个接口自己定义就行了.然后你可以让c来实现interfacea和interfaceb就可以了。  
      oop的思想并不是楼主所说的共享类方法,实质上更偏向于共享类属性。  
      如果a和b中没有可供c共享的属性或者很少,而只是方法接口有联系,那么这说明一个问题:你的类模块建立的逻辑不规范,没有实现所谓的强内聚弱耦合的oop原则。  
      如果你是就事论事,那么你可以把你的源代码贴出来让大家分析一下。  
     

    网友:kidwish

    继承是种强耦合,楼主遇到的问题还是类与类之间的关系。要搞清这些问题关键还是要先理解面向对象和面向对象的设计。  
       
      我就简单说明一下好了!  
       
      类之间有4种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。  
       
      1)依赖:关系对象出现在局部变量或者方法的参数里,或者关系类的静态方法被调用  
      2)关联:关系对象出现在实例变量中  
      3)泛化:extends  
      4)实现:implements  
       
      对应到代码中,依赖关系可能有很多种形式,例如  
      public   class   a  
      {  
            public   b   getb(c   c,   d   d)  
            {  
                    e   e   =   new   e();  
                    b   b   =   new   b(c,   d,   e);  
            }  
      }  
      这里类a就依赖于类b、c和d、e,因为这几个类的变化都有可能影响到类a  
       
       
      泛化是一般事物和较特殊的事务之间的关系,对类来说一般就是继承了,如:public   class   a   extends   b。  
       
       
      关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,大部分情况下导航是单向的。  
      关联在代码中一般表示为属性,例如  
      public   class   a  
      {  
      private   b   b;  
      }  
      可以认为有一个a指向b的关联。如果b也关联到a,那么它们就是双向的关联。  
      有的时候b不是a的属性,但是也可以有关联关系,例如:  
      public   class   a  
      {  
      public   b[]   getbs()  
      {...}  
      }  
      方法getbs可能去查数据库,找到a和b之间的关联关系。  
       
       
      两个类之间的简单关联表示了两个同等地位类之间的结构关系。聚合也是一种关联关系,与简单关联不同的是,它描述的是一个整体和组成部分的关系,即“has-a”关系,意思是整体对象拥有部分对象,例如学校和学生的关系。聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象创建之前创建,也可以在整体对象销毁之后销毁。  
      public   class   person  
      {...}  
      public   class   school  
      {  
      private   arraylist   students;  
      private   void   addstudent(person   person)  
      {  
      students.add(person);  
      }  
      }  
      组合则是比聚合更强的关联形式。组合是指带有很强的拥有有关系且整体与部分的生命周期一致的聚合关联形式。例如windows的窗口和窗口上的菜单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。  
      public   class   menu  
      {...}  
      public   class   window  
      {  
      private   menu   menu;  
      }  
      组合和聚合在代码实现上的主要差别在于生命周期的实现上,组成需要负责其部分的创建和销毁。  
      public   class   school  
      {  
      public   school()  
      {...}//不需要创建任何person对象,其students都是已有的person对象  
      public   void   destroy()  
      {...}//只需要关掉school对象和断开它与自己所有的person对象的关联即可,person对象是不会销毁的  
      }  
       
      public   class   window  
      {  
      private   menu   menu;  
      public   window()  
      {  
      menu   =   new   menu();  
      }//可以在这时候创建menu对象,也可以在之后创建  
      public   void   destory()  
      {  
      menu.destory();  
      }//必须同时或者在这之前销毁关联的menu对象  
      }  
       
      另外有一个差别是组合中的一个对象在同一时刻只能属于一个组成对象,而聚合的一个部分对象可以被多个整体对象聚合,例如一个学生可以在多个学校就读,而一个菜单在同一时刻只能是某个窗口内的对象。  
       
       
      实现关系就比较简单了,指的是一个类元描述了另一个类元保证实现的契约。对类来说,就是一个类实现了一个接口  
      public   interface   a  
      {  
      public   void   methoda();  
      }  
      public   class   b   implements   a  
      {  
      public   void   methoda()  
      {...}  
      ...  
      }  
      一般在面对对象的系统中,尽可能的使用接口来减少类之间的耦合。因为接口没有实现,所以依赖于接口就不会依赖于某种具体实现,例如jdbc里的connection和resultset都是接口,不同数据库厂商的实现可以不一样。  
     

    网友:tony_jian

    think   in   java   里是这么说的:  
      有关联的类a与类b的关系有包含与属于两种。  
      如果是a包含b就在b类中用实例化一个a类的对象来实现。  
      如果是b属于a则通过b类继承a类来实现。  
      类本身不支持多继承。所以java用接口来实现多态。  
      在接口c中只有域和方法的申明。但没有方法的具体实现代码。引用a,b类的方法是通过作为方法的参数来实现。  
       
      我看你要的功能可以通过c类包含a,b类的实例来实现呀。

    .

    讨论区

    Login