社区
Java SE
帖子详情
Java不能多重继承,如何解决代码复用的问题?
sinall
2008-05-02 08:09:07
有人说可以这样:
newClass implements interface1, interface2 {
Class1 obj1;
Class2 obj2;
method1{
obj1.method1;
}
method2 {
obj2.method2;
}
}
用聚合的方法貌似可以,不过看起来很丑!而且一点也不面向对象啊?子类为什么要聚合多个父类呢???
...全文
404
12
打赏
收藏
Java不能多重继承,如何解决代码复用的问题?
有人说可以这样: newClass implements interface1, interface2 { Class1 obj1; Class2 obj2; method1{ obj1.method1; } method2 { obj2.method2; } } 用聚合的方法貌似可以,不过看起来很丑!而且一点也不面向对象啊?子类为什么要聚合多个父类呢???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunshine_anycall
2008-05-02
打赏
举报
回复
看看设计模式呗
很能解决问题的
aipb2008
2008-05-02
打赏
举报
回复
在OO中,设计的首先考虑是组合而非继承,代码复用并非因为继承机制。
继承带来的好处是使子类对象能够向上转型,继而可以使用父类对象引用子类对象,产生多态行为,这里才是代码复用的关键之处,在OO中“对接口编程”就是这样,用父类对象(或者接口)来产生构造关系,根据具体引用的子类对象来产生不同行为。
再说下多继承的问题,多继承的好处很多,就如楼主的“拉拉队员”的例子,但是如果她父亲和母亲是继承于一个父亲(近亲结婚,这样才能基因变异嘛),或者再往上几代,那么这位“拉拉队长”就同时拥有了两个爷爷,并且是相同的。这就是典型的“菱形问题”,在实际的开发中,这会导致很多错误和不可估计的结果(假如有很庞大的继承树)。
所以java舍弃了多继承,因为这个东西带来的坏处>好处。然而所谓的好处,也可以通过接口的机制来得到更完美的解决。
但是如果非要直接继承于两个或者多个类(非接口),那么有什么办法没?
答案是:没有
但是,在OO设计中,这样的问题视乎解决的目标,比如,有个类C,他需要非别能被向上转型为A和B,因为现在有两个方法
fa(A a),fb(B b),我们想要复用这两个方法。
那么一个很好的解决办法是“内部类”,因为内部类是可以访问外围类一切对象的。
class C extends A{
B getB(){
return B(){
};
}
}
C c = new C();
fa(c);
fb(c.getB);
当然,如果非要楼主说的那样不“丑陋”,要明确的让拉拉队长和塔父母分别有个“is-a”的关系,很遗憾,这个目标不能达到。
wtmiao000
2008-05-02
打赏
举报
回复
lz为什么说是继承呢?明明就是实现了两个接口。而且,实现的是接口。接口不是类。所以,也不是什么父类。接口就一套规范。说白了就是抽象方法和常量。为什么说丑陋?哪里丑陋,只看外观吗?直觉吗?你用JAVA多久?什么可以随便的说它丑陋?
sinall
2008-05-02
打赏
举报
回复
大家看过美剧《英雄》(Heros)没?
FlyMan
{
fly()
}
FireWoman
{
fire()
}
CheerLeader
{
FlyMan dad;
Firewoman mum;
fly()
{
dad.fly();
}
fire()
{
mum.fire();
}
}
呵呵,看起来,Cheerleader并没有继承她父母的超能力,
当别人让她.fly的时候,她就说,来老爸fly一个。
当别人让她.fire的时候,她就说,来老妈fire一个。
大家就当我纯扯淡,我只想说,这样确实有些丑陋。
Charlemagne
2008-05-02
打赏
举报
回复
[Quote=引用 5 楼 linli0727 的回复:]
弱弱的问一声ls,java怎么可以让子类拥有两个父类?
[/Quote]
java里面只能从一个父类继承
如果你的类需要2种特性,可以实现2个接口
joejoe1991
2008-05-02
打赏
举报
回复
组合那里丑陋了?
xihaxiha9712
2008-05-02
打赏
举报
回复
接口就是为了解决多重继承才发明的,LS 我也好奇,子类怎么有两个父类。。?
linli0727
2008-05-02
打赏
举报
回复
弱弱的问一声ls,java怎么可以让子类拥有两个父类?
sinall
2008-05-02
打赏
举报
回复
兄弟们,可能我表达有误。
“Java不能多重继承类(实现),如何解决代码复用的问题”???
用聚合的办法可以,不过子类拥有两个父类的引用似乎有些丑陋。。。
milo-higgs
2008-05-02
打赏
举报
回复
所以java才有接口的啊
老紫竹
2008-05-02
打赏
举报
回复
走路和飞行是2个类
如果某个动物既可以走路,又可以飞行,那怎么办?
多重继承还是有其优点的!
java里面就采用 Warkable 和 Flayable 2个接口来解决了!
loujianchengdd
2008-05-02
打赏
举报
回复
其实现在越来越不推荐继承了,继承会增强类之间的依赖,推荐用组合,也就是在一个类创建另一个类的引用,适配器模式或者jdk动态代理应该可以解决继承的问题
java
实现
多重继承
_
Java
对于
多重继承
是怎么实现的
展开全部
Java
对于
多重继承
是怎么实现的?首先回答这个
问题
之前,我需要说62616964757a686964616fe4b893e5b19e31333363363433明下什么是继承?什么是
多重继承
和单继承?
java
采用何种机制来实现
多重继承
:1.1继承是面向对象编程的一种特性,是保留原有类功能的前提下拓展或改写部分功能,实现
代码
复用
的方式.。1.2单继承就是一个类只可以继承自一个父类,多继承是指...
Java
接口:实现
多重继承
,促进
代码
复用
与扩展的强大工具
Java
中使用interface关键字定义接口,接口中可以包含常量和抽象方法。接口中的成员默认为公共、静态和常量,不需要显式声明。// 常量,等同于 public static final int CONSTANT = 100;// 抽象方法,等同于 public abstract void abstractMethod();接口是
Java
编程中一个强大的特性,它实现了
多重继承
,促进了
代码
复用
与扩展,并且在多态的应用中发挥着重要作用。
java
多重继承
_[
java
se学习笔记]-9.2 单继承与
多重继承
这一节我们来看
java
中的单继承和
多重继承
。在
java
语言中,支持的是单继承,不直接支持多继承,可是对C++中的多继承进行了改良。那么什么是单继承和多继承呢?单继承:一个子类仅仅能有一个直接父类。多继承:一个子类能够有多个直接父类。这个在
java
中是不同意的。为什么不同意呢?我们看一个样例:class A{void method(){System.out.println("a");}}class ...
Java
(50):
Java
继承与组合
Java
继承与组合 继承是实现类
复用
的重要手段,但继承带来了一个坏处:破坏封装组合也是实现类
复用
的重要方式,而组合可以提供良好的封装性。 一、继承的基础: 为了保证父类有良好的封装性,不会被子类随意修改,设计父类通常应该遵循以下规则: 1、尽量隐藏父类的内部数据,尽量把父类的所有成员变量设置为 private 访问类型,不要让子类直接访问父类的成员变量; 2、不要让子类可以随意访问和修改父类方法,父类中仅为辅助其他工具的方法,应该使用private访问控制符修饰,让子类无法访问该方法;如果父类中.
为什么
Java
不支持多继承
在
Java
语言中,不支持多继承的主要原因是为了和(如菱形)以及,同时又因为在实际工作中,确实很少用到多继承,所以在
Java
语言中,并不支持多继承。而且,虽然
Java
中不支持多继承,但也给了一些功能上的,比如。
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章