CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

java怎么“继承”已存在的两个类?

楼主jackie2004(时光的羁绊)2006-03-17 18:39:11 在 Java / J2SE / 基础类 提问

帮我看看这个想法有错没  
  java中~  
  建立了两个类,类都有属性和方法。  
  我想在一个x类直接使用这两个类的方法。  
   
  于是我就定义一个接口包括他们所有的方法  
   
  再在x类里面实现(implements)这个接口的所有方法  
  而实现这些的方法都是!!   直接从原来两个类里直接复制过  
  来   !!(对吗?)来当方法实现  
   
  再在另个y类里面使用这个接口~使用接口时候,(要知道  
  借口名称和它实现的类名称)  
   
  于是这个类就可以使用继承了两个类   ,是这样的吗?    
   
  比如有两个建立好的类,我想象c++   那样继承这两个类,我该怎么办。在书本这章我好象找不到办法。  
  就算写了个接口。但还是要复制原来的方法过来  
  不解,不见得相同的代码只编写一次那样可重用性。  
   
  我哪里出问题了。。    
   
   
  比如~   要用接口“继承”如下   两个类,我该怎么办?  
  //Add.java  
  public   class   Add{  
  double   firstnum;double   secondnum;  
   
  Add(double   first,double   second){  
  firstnum=first;secondnum=second;  
  }  
   
  public   void   add(){  
  System.out.println("相加为"+(firstnum+secondnum));  
  }  
   
  public   static   void   main(String   []args){  
  Add   add1=new   Add(12.56,45.56);  
  add1.add();  
  }  
  }    
  //Minus.java    
  public   class   Minus{  
  double   first;double   second;    
  Minus(double   first1,double   second2){  
  first=first1;second=second2;  
  }  
  public   void   minus(){  
  System.out.println("相减为"+(first-second));  
  }  
  public   static   void   main(String   []args){  
  Minus   minus1=new   Minus(145.65,56.5);  
  minus1.minus();  
  }  
  }    
   
   
  问题点数:100、回复次数:16Top

1 楼Nowish(看我能忍耐多久)回复于 2006-03-17 18:54:04 得分 0

Mark~Top

2 楼TinyJimmy(Jimmy)回复于 2006-03-17 19:07:41 得分 20

没办法多重继承,只能有一个父类。  
   
  只能使用模式来变通实现。如最简单的组合:  
   
  public   class   Calc{  
      private   Add   add;  
      private   Minus   minus;  
   
      public   Calc(double   first;double   second){  
          add=new   Add(first,   second);  
          minus=new   minus(first,   second);  
      }  
      public   void   add(){  
          add.add();  
      }  
      public   void   minus(){  
          minus.minus();  
      }  
  }Top

3 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2006-03-17 19:25:19 得分 2

组合比继承本来就是更好的思想。Top

4 楼zx2002027(http://www.netyi.net/in.asp?id=zx2002027)回复于 2006-03-17 19:30:07 得分 2

JAVA是单根继承,一次只能继承一个类  
  Top

5 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-03-17 19:45:40 得分 2

当不能决定使用组合还是继承时,优先使用组合。Top

6 楼yjws(楚天哥)回复于 2006-03-17 19:46:37 得分 20

用接口吧..接口就可以实现多层继承Top

7 楼lyf040230427(枫叶)回复于 2006-03-17 19:59:38 得分 20

也可以用Template   method   pattern来实现,代码如下(调试正确):  
  class   Operator{  
  double   result;  
  public   void   add(){  
  }  
   
  public   void   minus(){  
  }  
           
          public   double   getValue(){  
          return   result;  
          }  
  }  
   
  class   Add   extends   Operator{  
  private   double   data1,data2;  
  public   Add(double   data1,double   data2){  
  this.data1   =   data1;  
  this.data2   =   data2;  
  }  
  public   void   add(){  
  this.result   =   data1   +   data2;  
   
  }  
   
  public   double   getValue(){  
  return   result;  
  }  
  }  
   
  class   Minus   extends   Operator{  
  private   double   data1,data2;  
  public   Minus(double   data1,double   data2){  
  this.data1   =   data1;  
  this.data2   =   data2;  
  }  
  public   void   minus(){  
  result=   data1   -   data2;  
   
  }  
   
  public   double   getValue(){  
  return   result;  
  }  
  }  
   
  public   class   Test2{  
  public   static   void   main(String   args[]){  
  Operator   op1   =   new   Add(12.36,43.20);  
  Operator   op2   =   new   Minus(12.36,43.20);  
   
  op1.add();  
  op2.minus();  
   
  System.out.println("add   result:"+op1.getValue());  
  System.out.println("minus   result:"+op2.getValue());  
  }  
  }Top

8 楼lyf040230427(枫叶)回复于 2006-03-17 20:02:04 得分 2

再说明一下,其实上面就是对Java多态性的一种运用,两个很相识的类,就应该考虑利用  
  多态性来实现吧.  
  希望高手指点.谢谢!Top

9 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-03-17 20:56:45 得分 10

楼上的代码改成这样,也许更好一点:  
   
  public   interface   Operator   {  
      public   Object   compute();  
  }  
   
  public   class   Add   implements   Operator   {  
      private   double   a;  
      private   double   b;  
      public   Add(double   a,double   b){  
          this.a=a;  
          this.b=b;  
      }  
      public   Object   compute(){  
          return   new   Double(a+b);  
      }    
  }  
   
  public   class   Minus   implements   Operator   {  
      private   double   a;  
      private   double   b;  
      public   Minus(double   a,double   b){  
          this.a=a;  
          this.b=b;  
      }  
      public   Object   compute(){  
          return   new   Double(a-b);  
      }    
  }Top

10 楼heroseaxuj(寻找影子的人)回复于 2006-03-17 21:39:16 得分 2

我是新手   我的有个办法不知行吗   请高手指教  
  让你的class   add   extends   minus    
  再让你的X类继承add   这样X就可以使用两个类的方法Top

11 楼flyflyba(爱编程的菜鸟)回复于 2006-03-17 22:09:14 得分 2

继承有二个价值:使用基类的成员和方法(起到简化逻辑和代码的作用),和上传。组合起不到上传的作用。若需要达到同时上传两个基类的效果,我想至少有一个基类是用接口的方式。  
   
  我是初学者,请高手指正。Top

12 楼flyflyba(爱编程的菜鸟)回复于 2006-03-17 22:34:34 得分 8

为了把我的意思表达充分,现举例。MP3Phone   同时继承MP3   和Phone,能清晰能表现出类之间的关系。  
   
  interface   MP3   {  
  void   playmusic();  
  }  
   
  interface   Phone   {  
  void   call();  
  }  
   
  class   MotoMP3   implements   MP3{  
  String   name="motoMP3";  
  public   void   playmusic(){  
  }  
  }  
   
  class   MotoPhone   implements   Phone{  
  String   name="motophone";  
  public   void   call(){  
  };  
  }  
   
  interface   MP3Phone   implements   MP3,Phone{  
   
  }  
   
  public   class   MotoMP3Phone   implements   MP3Phone{  
  String   name="motoMP3Phone";  
  private   MotoMP3   motoMP3=new   MotoMP3();  
  private   MotoPhone   motoPhone=new   MotoPhone();  
  public   void   playmusic(){  
  motoMP3.playmusic();  
  }  
  public   void   call(){  
  motoPhone.call();  
  }  
   
  }Top

13 楼quqiujie(紫炎)回复于 2006-03-17 22:43:15 得分 2

heroseaxuj(海之悠扬)      
   
  说的完全可行  
   
  不过这样的问题最好是使用组合Top

14 楼filippo_le(命--(天晓得我是哪个))回复于 2006-03-17 22:47:09 得分 2

用实现接口的办法,在设计之初就要考虑哪些类是有子类的,那些类需要继承!Top

15 楼humanity(城市边缘的狼)回复于 2006-03-17 22:56:13 得分 6

不能拷贝拼凑,那样修改了就不能同步,你的类都要跟着改。  
   
  内部类   或者   委托的方式实现。  
   
  继承在多态与抽象中能表现更大价值,不是为了偷懒的。Top

16 楼cqsls(阿玄)回复于 2006-03-18 13:57:49 得分 0

少继承,多用接口,尽量减少程序的耦合Top

相关问题

  • 类似java继承写法?
  • 类怎样继承
  • 类继承问题?
  • CDialogBar类的继承
  • 类继承时,子类对象内存空间是否存在父类的私有成员
  • C++Builder6.0中关于从经存在的一个窗口类型(TForm)继承问题!
  • java继承的问题
  • JAVA中继承的问题???
  • java继承的问题
  • Form 存在继承问题吗?

关键词

  • mp3
  • 接口
  • minus
  • motomp
  • 继承
  • motophone
  • 类
  • playmusic
  • double
  • firstnum

得分解答快速导航

  • 帖主:jackie2004
  • TinyJimmy
  • jFresH_MaN
  • zx2002027
  • Saro
  • yjws
  • lyf040230427
  • lyf040230427
  • Saro
  • heroseaxuj
  • flyflyba
  • flyflyba
  • quqiujie
  • filippo_le
  • humanity

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo