java怎么“继承”已存在的两个类?
帮我看看这个想法有错没
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




