面向对象的三大特性

合集下载

面向对象的编程语言特点

面向对象的编程语言特点

面向对象的编程语言特点
1.封装性:将对象的数据与函数封装在一起,只对外部提供必要的接口,隐藏内部实现细节,提高安全性和可靠性。

2. 继承性:允许从现有类派生出新的类,新类可以继承原类的属性和方法,并可以添加新的属性和方法,提高代码复用性和可维护性。

3. 多态性:同一操作可以针对不同的对象产生不同的行为,提高代码的灵活性和可扩展性。

4. 抽象性:将对象的共性抽象出来形成类,通过类来实例化对象,避免重复编写代码,提高代码的可读性和可维护性。

5. 消息传递:对象之间通过消息传递来进行通信,而不是直接对数据进行操作,降低了对象之间的耦合度,提高了代码的可移植性和可扩展性。

6. 动态绑定:在运行时根据对象的类型来确定实际调用的方法,实现了动态多态,提高代码的灵活性和可扩展性。

7. 内存管理:面向对象的语言通常采用自动内存管理机制,避免了程序员手动管理内存的繁琐和容易出错。

- 1 -。

java面向对象的三个特征

java面向对象的三个特征

使用java面向对象编程的三大特征大多数新人,在才开始学习java面对对象编程的过程中对于这一块的三大特征一直比较模糊,基本都是刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵懵懂懂,后来实践的多了,有些东西才慢慢清楚;二是经过一定的实践之后,反过头来再去学习一些基础东西才能够理解的更透彻;三是有些东西基础但是确很重要,是值得好好搞一搞的。

1、面向对象面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。

从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。

2、对象对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。

一个对象由一组属性和对这组属性进行操作的一组服务组成。

3、类类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。

在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性和方法两个主要部分。

Java中的类实现包括两个部分:类声明和类体。

类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。

当不存在对一个对象的引用时,该对象成为一个无用对象。

Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。

当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。

向对象的三个基本特征是:封装、继承、多态。

4、封装封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。

封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。

可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。

简述对面向对象的三大特征的理解

简述对面向对象的三大特征的理解

简述对面向对象的三大特征的理解
面向对象有三大特点:封装、继承、多态。

1、继承性:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。

对象的一个新类可以从现有的类中派生,这个过程称为类继承。

新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。

派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

2、封装性:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

3、多态性:
多态性是指允许不同类的对象对同一消息作出响应。

多态性包括参数化多态性和包含多态性。

多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

面向对象的三大特性(封装-继承-多态)

面向对象的三大特性(封装-继承-多态)

一丶封装1 权限修饰符可以用来修饰成员变量和成员方法,对于类的权限修饰只可以用public和缺省default。

被public修饰的类可以在任意地方被访问;default类只可以被同一个包内部的类访问。

权限由大到小:public protected default(不写) private被private修饰的成员只能在本类中访问,外界不能访问2 set()/get()方法(1)this关键字a.可以用来调用变量,方法,构造方法;b.this.xx 理解为调用当前类的xx。

(2)成员变量和局部变量1)在类中的位置不同a:成员变量:在类中,方法外b:局部变量:在方法声明上(形式参数),或者是在方法定义中2)在内存中的位置不同a:成员变量:在堆内存b:局部变量:在栈内存3)生命周期不同a:成员变量:随着对象的创建而存在,随着对象的消失而消失b:局部变量:随着方法调用而存在,随着方法的调用结束而消失4)初始化值不同a:成员变量:有默认值b:局部变量:必须初始化值,否则报错!(在使用它之前,没有初始化) (3)set()/get()方法当成员变量被private修饰时,不在本类中无法直接访问,便需要set()/get()方法来解决这个问题3 封装性封装:是面向对象的第一大特性,所谓封装,就是值对外部不可见(一般而言被private修饰),外部只能通过对象提供的接口(如set()/get()方法)来访问。

封装的好处:a.良好的封装能够减少耦合;b.类内部的结构可以自己修改,对外部影响不大;c.可以对成员进行更精准的控制(防止出现与事实不符的情况);d.影藏实现细节。

注意:在开发中,类的成员变量全部要进行封装,封装之后通过set()/get()方法访问。

二丶继承extends1 实现:通过 class Zi extends Fu{} 实现类的继承(1)子类继承父类,父类中声明的属性,方法,子类都可以获取到;当父类中有私有的属性方法时,子类同样可以获取到,由于封装性的设计,使得子类不能直接调用访问。

面向对象的三大特征

面向对象的三大特征

⾯向对象的三⼤特征
⾯向对象有三个特征:1.封装,2.继承,3.多态。

封装
⼀个不可分割的独⽴实体;
隐藏内部细节;
保留对外接⼝。

封装的好处:
1. 保证数据的安全性;
2. 提供清晰的对外接⼝;
3. 类内部实现可任意修改,不影响其他类。

继承
继承可以使⼦类具有⽗类的属性和⽅法,或者重新定义、追加属性和⽅法等。

对象的继承代表了⼀种‘is-a’的关系,如果两个对象A和B,可以描述为‘B是A’,则表明B可以继承A;例如⼈是动物,猫是动物,狗是动物等等......
实际上,继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备⾃⼰独有的个性。

例如猫块可以爬树,⽽并不是所有动物都会爬树。

这也就说明量对象之间是不能颠倒顺序的。

继承定义了类如何相互联系,共享特性,继承的⼯作⽅式是,定义⽗类和⼦类,或叫做基类和派⽣类,其中⼦类继承⽗类的所有特性,⼦类不仅继承了⽗类的所有特性,还可以定义新的特性。

继承提⾼了代码复⽤性
多态
同⼀操作作⽤于不同的对象,可以有不同的解释,产⽣不同的执⾏结果,这就是多态性
简单来说就是⼀类事物有多种形态,例如动物有多态:猫、狗、⼈...
多态的特点:
1. 多态前提是必须有继承;
2. ⽗类引⽤变量指向⼦类;
3. ⽗类引⽤变量调⽤⽅法时,会调⽤⼦类重写后的⽅法。

简述面向对象的特点

简述面向对象的特点

简述面向对象的特点
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序中的数据和操作数据的方法组合成一个对象,以此来描述现实世界中的事物和概念。

面向对象编程具有以下特点:
1. 封装性:封装是指将数据和方法封装在一个对象中,对外部隐藏对象的内部实现细节,只暴露必要的接口。

这样可以保证数据的安全性和一致性,同时也方便了代码的维护和重用。

2. 继承性:继承是指一个类可以继承另一个类的属性和方法,从而减少代码的重复性。

子类可以重写父类的方法,也可以添加自己的方法和属性,从而实现更加灵活的功能。

3. 多态性:多态是指同一个方法可以根据不同的对象调用出不同的行为。

多态可以提高代码的可扩展性和可维护性,同时也可以提高代码的可读性和可理解性。

4. 抽象性:抽象是指将具有相似特征的对象抽象成一个类,从而减少代码的重复性。

抽象类和接口是面向对象编程中的重要概念,它们可以定义一些方法和属性,但是不能被实例化,只能被子类继承或实现。

面向对象编程的特点使得它在软件开发中得到了广泛的应用。

它可以提高代码的可重用性、可扩展性和可维护性,同时也可以提高代码的可读性和可理解性。

面向对象编程可以应用于各种领域,如游
戏开发、Web开发、桌面应用程序开发等。

随着计算机技术的不断发展,面向对象编程也在不断地演化和发展,如面向方面编程(Aspect-Oriented Programming,AOP)、面向服务编程(Service-Oriented Programming,SOP)等。

【面向对象设计的3个基本特征】

【⾯向对象设计的3个基本特征】JAVA中⾯向对象的三⼤特征:⾯向对象具有继承性(Inheritance)⾯向对象具有多态性(Polymorphism)⾯向对象具有封装性(Encapsulation)⼀、继承多个类具有共同的属性(成员变量)与⾏为(成员⽅法)的时候,将这些共同的部分抽取出来定义到⼀个公共的类中,其他及各类可以与这个公共的类形成继承关系,从⽽在多个类中不需要重复定义公共部分!这个公共的类就是⽗类,也称为超类或者基类,其他的类就是⼦类。

⼦类可以直接访问⽗类的⾮私有化成员变量,访问⽗类的私有化成员变量可以使⽤super.get()⽅法。

1、 Java继承的特点:A、Java只存在单个继承不存在多个继承,即:⼀个类只能有⼀个⽗类B、Java可以多层继承,多重继承2、Java继承的优点A、继承是基于存在多个重复代码的时候提出的,那么继承能很好的提⾼复⽤率!B、使类与类之间存在继承关系,是实现多态操作的前提!C、继承关键字:extends3、Java继承的缺点继承使得多个类之间具有了⼦⽗类关系,当⼀个类存在多个⼦类的时候,如果⽗类发⽣变化,那么这些⼦类会跟着⼀同变化,造成类与类之间的“强耦合”关系!4、Java继承注意点A、不要仅仅为了获取某个类的某个功能⽽去继承这个类B、类与类之间要存在所属关系,不能够随意继承例:⼈与狗都具有吃饭的动作,狗为了实现吃饭的动作,⽽继承⼈,这是不合适的!所谓的所属关系是is--a的关系,也就是说AAA is BB 的....学⽣是⼈的某⼀个群体,可以同时具有吃饭的动作5、何时使⽤继承A、具有公共的属性与⾏为操作的时候,提⾼复⽤性B、具有is--a的所属关系的类与类之间6、类的主要组成部分的⼦⽗类继承关系中的特点!A、成员变量a、继承关系中同名的⼦类成员变量、局部变量、⽗类的成员变量这三者之间使⽤顺序:在具有相同变量名的这种情况下,不使⽤this、super等关键字进⾏调⽤时,即成员变量前什么都不写,调⽤顺序按照由局部变量位置---当前类成员变量位置---⽗类成员变量位置依次进⾏查找变量,什么位置先有值,就会使⽤这个值!调⽤⽅式:this,superB、成员⽅法a、继承中的成员⽅法使⽤顺序:当⼦类具有与⽗类同名成员⽅法时,进⾏调⽤过程中不使⽤this、super等关键字,即成员⽅法前什么都不写,⽅法的有效顺序:当前类的成员⽅法---⽗类的成员⽅法⼦类中有⽅法实现,则按照⼦类的实现进⾏,若在⼦类中使⽤super调⽤了⽗类的⽅法,那么⽗类⽅法也要执⾏!但是默认成员⽅法内是没有super调⽤的!!!b、重写概念:⼦类中出现与⽗类⼀模⼀样的⽅法时,会出现⼦类⽅法将⽗类⽅法覆盖的情况,这种情况成为重写或者复写c、重写注意事项- ⽗类中的私有⽅法不可以被重写,覆盖!- ⼦类重写⽗类⽅法后,继续使⽤⽗类的⽅法时候,可以使⽤super调⽤- 重写时,⼦类的⽅法的访问权限要⼤于或者等于⽗类成员⽅法的访问权限- 静态⽅法只能被静态⽅法覆盖- ⼦类对于⽗类的功能有增强需求的时候,可以重写⽗类的⽅法以增强其功能!d、重写与重载的区别重写:⼦⽗类之间,⽅法完全相同(返回值、⽅法名、参数列表),但是⼦⽗类之间的⽅法体必须不同,否则没有意义!重载:同⼀个类中,⽅法名相同,参数列表不同,与返回值⽆关!(参数列表:包括两项:参数个数,对应参数的数据类型)重载何时使⽤:当⼀个类中需要完成某个相同功能,但是⽅法的参数不同需要分别进⾏操作时!C、构造⽅法a、⼦类中所有的构造⽅法默认都访问⽗类中⽆参构造b、每个构造⽅法的第⼀⾏是super();super(参数列表);如果把这两⾏代码放在⾮第⼀⾏位置会报错c、根据构造⽅法的特性,在⼿动给出任意⼀个构造⽅法的时候,之前默认的⽆参构造会被覆盖,此时具有继承关系的时候,⼦类之前默认存在的每个构造都调⽤⽆参构造super()失效,此时必须在每个构造⽅中⼿动给出super(参数列表)的⽅式直接或间接调⽤之前⼿动在⽗类中给出的构造!d、构造⽅法执⾏了⼀定会创建相应对象吗?不⼀定,当具有继承关系的类时,⼦类创建对象的时候会调⽤⽗类的构造⽅法,⽤来初始化⽗类的成员变量,这个时候⽗类的构造执⾏了,但是内存中并没有⽗类的对象!e、构造⽅法是否可以被重写或者继承?不可以,因为构造⽅法名需要与类名相同,假如出现继承或者重写关系,就会有⼦类中有⼀个与⽗类的类名相同的构造⽅法,但是⼜由于构造⽅法需要与类名相同,此时⼦类类名需要与构造相同,这个时候就会出现⽗类与⼦类的类名相同,⽗类类名==构造⽅法名==⼦类类名,不能存在同名的类!⼆、多态java程序中定义的引⽤变量所指向的具体类型和通过该引⽤类型发出的⽅法在调⽤时不确定,该引⽤变量发出的⽅法到底调⽤哪个类的实现的⽅法,必须在程序运⾏期间才能决定,这就是多态。

Java面向对象的三大特性

Java面向对象的三大特性Java面向对象的三大特性Java面向对象的三大特性分别为:封装、继承、多态,下面我们一起来详细了解一下!1.封装:说得通俗一点,就是把细节隐藏起来,把该公开的公开,把该私有的私有。

那如何封装一个类?类中含属性和方法,属性可有可无,并且应该设置为private.方法可有可无,对外的方法的应该公开,对内的方法应该私有.一个类的方法,大致有:构造方法 -> 可以生成存/取属性值的方法,也就是 getter/setter 属性方法. -> 可以生成业务方法,实现此类对象的真正业务功能,是程序员真正需要花心思考虑的。

针对类中的方法,有以下两种封装策略:1).把存/取属性方法、构造方法、业务方法全部封装到同个类中。

2).把业务方法单独独立出来,形成一个业务类,这个类用来操作与它所相关的实体对象。

它一般由接口与实现类组成.实体(Entity)对象,就是指含业务属性和属性存/取方法的对象.如:封装策略一:public class Account {private long id;private String name;private double balance;private String pwd;....// getter/setter方法// 构造方法....// 业务方法public void withdraw(double money) {if(balance < money) {System.out.println("余额不足");return ;}balance -= money;}public void deposit(double money) { }}//采用封装策略二:首先是实体类public class Account {private long id;private String name;private double balance;private String pwd;....// getter/setter方法// 构造方法}//再定义一个业务类,操作Accountpublic class AccountService {// 业务方法public void withdraw(Account a,double money) { if(a.getBalance() < money) {System.out.println("余额不足");return ;}a.setBalance(a.getBalance - money);}public void deposit(Account a, double money) { }}注:此处在真实的场景中应该由接口与实现类组成。

Java面向对象的三大特征


public class Demo2 {
public int num;
public Demo2(){ this(1);
}
// this关键字调用类中的其他构造函数
public Demo2(int a){
this.fun();
// this关键字调用类中的其他方法
System.out.println(a);
}
在子类中重写:
public class Son extends Father { /** * 一个跟父类方法一样的方法 */ public void say(){ System.out.println("我会说英语"); } public static void main(String[] args) { Son son = new Son(); son.say(); }
/** * 父类中的成员方法 */ public void say(){
System.out.println("我会说话"); }
public void eat(){ System.out.println("我会吃饭");
} }
2)、编写子类,继承父类
a.子类继承父类时只能继承一个父类
b.继承的关键字 extends
}
二、继承
1、继承的概念和特点
概念:
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或类从父 类继承方法,使得子类具有父类相同 的行为。
特点:
继承鼓励类的重用 继承可以多层继承 一个类只能继承一个父类 父类中private修饰的不能被继承 构造方法不能被继承

面向对象三大特征的理解

面向对象三大特征的理解面向对象(Object-Oriented Programming,OOP)是计算机科学中的重要概念,是一种编程范式,强调将程序看作一系列对象,将程序开发过程中的代码组织成具有层次结构的类和对象,以及使用类和对象之间的交互来实现程序的功能。

OOP 的三大特征如下:1. 封装(封装):将程序中的敏感信息(如数据和方法)隐藏在类的内部,只向外部暴露一些公共接口供其他对象访问和使用。

封装使得类能够更好地保护数据和方法,避免不必要的修改和破坏,同时也使得类更加灵活,可以根据需要随时修改内部状态。

2. 继承(继承):类可以从其他类继承属性和方法,实现类之间的多态性。

继承使得类能够更好地模仿其他类的形态和行为,同时也增加了程序的灵活性和可扩展性。

3. 抽象(抽象):抽象类没有具体的实现,只声明了一些公共的接口,需要使用实例化的对象来调用接口方法。

抽象类可以减少代码的重复和冗余,同时也使得类更加灵活,可以根据需要随时取消抽象。

除了上述三大特征,OOP还有其他一些重要的特征,如多态性、接口、类层次结构、面向对象编程的原则等。

在实际编程中,我们可以根据具体的需求和场景选择合适的编程范式,以更好地组织和管理程序的代码和功能。

除了以上三大特征,面向对象编程还有一些常见的实现方法和技术,如继承、多态、接口、类层次结构、抽象类等。

在实际编程中,我们需要根据具体的需求和场景选择合适的实现方法和技术,以更好地组织和管理程序的代码和功能。

面向对象编程是一种重要的编程范式,具有强大的功能和灵活性。

在实际编程中,我们需要深入理解和掌握面向对象编程的三大特征和常见的实现方法和技术,以更好地组织和管理程序的代码和功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象的三大特性
收藏
面向对象的三个基本特征是:封装、继承、多态。

封装
封装最好理解了。

封装是面向对象的特征之一,是对象和类概念的主要特性。

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

在Java中类中成员的属性有:public,protected,<default>,private,这四个属性的访问权限依次降低。

继承
面向对象编程(OOP) 语言的一个主要功能就是“继承”。

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些OOP 语言中,一个子类可以继承多个基类。

但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

继承概念的实现方式有三类:实现继承、接口继承和可视继承。

Ø实现继承是指使用基类的属性和方法而无需额外编码的能力;
Ø接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
Ø可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。

例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承Person 类。

但是Leg 类却不能继承Person 类,因为腿并不是一个人。

抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字Interface 而不是Class。

OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。

如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。

那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。

对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。

也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。

当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

因此,这样的函数地址是在运行期绑定的(晚邦定)。

结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。


那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。

而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

泛化(Generalization)
在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。

Person(人)是基类,Teacher(教师)、Student(学生)、Guest(来宾)是子类。

若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B 继承A的功能和属性。

例如,教师是人,Teacher 是Person的“一种”(a kind of )。

那么类Teacher可以从类Person派生(继承)。

如果A是基类,B是A的派生类,那么B将继承A的数据和函数。

如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。

若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能和属性。

聚合(组合)
若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。

例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生(继承)而成。

聚合的类型分为无、共享(聚合)、复合(组合)三类。

聚合(aggregation)
上面图中,有一个菱形(空心)表示聚合(aggregation)(聚合类型为共享),聚合的意义表示has-a关系。

聚合是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

组合(composition)
这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)(聚合类型为复合)。

组合表示的关系也是has-a,不过在这里,A的生命期受B控制。

即A会随着B的创建而创建,随B的消亡而消亡。

依赖(Dependency)
这里B与A的关系只是一种依赖(Dependency)关系,这种关系表明,如果类A被修改,那么类B会受到影响。

相关文档
最新文档