java中类与类之间的关系有依赖和继承,那么这两种关系哪个效率高?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中类与类之间的关系有依赖和继承,那么这两种关系哪个效率高?相关的知识,希望对你有一定的参考价值。

参考技术A 要是单纯说两个类之间的效率,那肯定是继承的效率更高了,因为继承使用了共有的资源,但是没有谁会光针对两个类来编程吧。
所以实际上是,无论继承还是依赖,只要
算法设计
恰当,效率都不会低。要是算法设计不好的话,让
时间复杂度
和空间
复杂度都无法控制,那么无论是依赖还是继承效率都不会高的。
因为继承和依赖是高级的抽象概念,具体到
计算机
只会考虑
二进制
指令与
数据流
,算法好的话,有限的指令与数据就能处理更多的问题。而这些指令和数据是依赖与继承都可以产生。

JAVA面向对象设计中类关系

现在看以前描述有点小问题:类之间关系分为继承、泛化、依赖、关联、聚合、聚合关系几种。继承是is a关系,泛化(类实现接口)表示like a关系。

 


 

 类之间的关系种类: Generalization(泛化)Dependency(依赖关系)Association(关联关系)Aggregation(聚合关系)、Composition(组合关系)
   Generalization(泛化)表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。

继承、实现关系是比较明确的,另外几种依赖、关联关系要结合语义(具体上下文环境)来理解。
依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。
关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。
聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
总结:从关联关系到组合关系类之间的关联逐步变强,被依赖类的修改对依赖类影响越来越大,两个类之间的耦合度越来越高。几种关系的区分要结合具体的语义环境,简单从代码层面区分:
A类依赖B类提现为A中局部变量或方法参数中含有B类对象或者调用B类的静态方法;
A、B类关联关系体现为A有B类型的成员变量;
A、B类聚合关系体现为A类有B类的成员变量且有构造函数传入B类对象作为参数;
A、B类组合关系体现为A类有B类型的成员变量,且A类构造函数中有对B类型成员变量的实例化,A类对象生命周期严格决定了B类成员变量的生命周期。
在设计时要尽量避免双向依赖,解决双向依赖的方法:
第一个办法是平移,比如A和B互相依赖,那么可以将B依赖A的那部分代码,移动到工程B中,这样一来,B就不需要继续依赖A,只要A依赖B就可以了,从而消除循环依赖
第二个办法是下移,比如A和B互相依赖,同时它们都依赖C,那么可以将B和A相互依赖的那部分代码,移动到工程C里,这样一来,A和B相互之间都不依赖,只继续依赖C,也可以消除循环依赖。
 
 
 
 
 





以上是关于java中类与类之间的关系有依赖和继承,那么这两种关系哪个效率高?的主要内容,如果未能解决你的问题,请参考以下文章

java中类与类之间的关系讲解

JAVA面向对象设计中类关系

Python设计模式 - 基础 - 类与类之间的六种关系

四. Java继承和多态9. 类与类之间的关系

UML类图(Class Diagram)中类与类之间的关系及表示方式(转)

UML | 类图