对象的关联关系

197 阅读4分钟

对象的关联关系

我们现在有了一些面向对象的基本认知了,至少包括:需要在问题域当中寻找对象,定义类,new对象,调用对象的属性和行为了。 在实际开发中,我们遇到的很多问题不是某一个对象单独解决的,而是可能由多个不同类型的对象协作完成的,那么我们就需要在复杂问题域当中去设计他们的关联,让他们能够协同。

对象的三种关联关系

  1. has-a 关系:有一个。

指的是在一个对象的内部“拥有”另一个对象

  1. use-a 关系:用一个。

指的是在一个对象的某个方法当中“使用”另一个对象

  1. is-a 关系:是一个。 指的是一个对象是另外一种对象的特例。

其中,今天我们涉及前两个,第3个是放在面向对象课程的“继承”章节再来讲解。

has - a 关系

在语法上,has-a关系就是把一个对象设计为另一个对象的属性。

关联分 单向关联 和 双向关联

A has B 或 B has A 都叫做单向关联

A has B 且 B has A 叫做双向关联

把对方设计为自己的属性后,有一个特点,那就是在当前对象的所有方法中,都可以访问到关联对象。换句话说,两个对象的生命周期是保持一致的,这就是所谓的你中有我,我是你的一部分。

use - a 关系

在语法上,use-a关系是把一个对象设计为另一个对象的某个方法的局部变量。

该变量可以通过参数传递进这个方法,也可以在方法内部自己new一个。两者无论采用哪种方式,都是use-a关系。因为参数也好,自己方法内部声明定义也好,都是方法内部的局部变量,方法结束,局部变量消失,关系解除。

this 关键字

学到现在,我们发现在一个类当中定义的属性和行为,都需要用"对象."的方式来访问。这种语法的规定是有道理的,因为同一个类可以产生多个对象,我们必须明确的告知是哪个对象的属性,或者调用哪个对象的方法。

在类的内部方法中,访问当前类的属性或调用自己的某个方法,也有一个默认的对象---用this表示。这个this代表的是“当前对象”,相当于“我”的含义。那么谁是当前对象呢?谁调用这个方法谁就是“当前对象”。

利用“this.”,后面可以访问自己属性和自己的行为。

有同学可能会说:this用处不大,因为根据作用域,就算不写this也可以访问本类的属性或调用本类的方法。但是我们建议大家在书写代码的时候只要是访问本类属性或本类方法就加上"this."。原因:

  1. 利用IDEA工具,书写上"this."以后,可以自动联想出本类的属性和方法,提高编程速度;
  2. 它可以区分局部变量和属性重名的情况;

对于"this."的使用,我们要分情况:

  1. 如果出现局部变量和全局变量重名,我们又需要特指全局的时候,那么就一定要用"this.";
  2. 如果没有出现上面的这种情况,加不加"this."就看程序员个人的使用习惯,或你服务的公司的代码规范了。

当我们的程序越来越大,里面包含的类越来越多,那么我们就需要一种结构能够帮助我们分门别类的存放这些类,以达到更好的管理。于是,有了“包”的概念。

包的命名规范:全小写

包在本质上大家就把它想成是专门用来存放java类的文件夹。当一个java类被放入到某个包当中的时候有以下几个特点:

  1. 在这个类的最高处要增加一句包申明的代码,使用关键字"package",后面跟上包的名字。

比如: package com.lovo.test;  

  1. 在默认情况下,一个java类只能访问来自于同一个包的其他java类。如果需要访问其他包的类,那么需要使用关键字“import”,把那个类导入进来。 比如: import com.lovo.practise.Car; 可以使用 import com.lovo.practise.*; 导入practise包下面所有的java类,但是不建议这么做,最好的方式是需要用谁才导入谁。
  2. 在IDEA工具中,具有多种创建包或创建类的方式,需要大家逐步的熟悉。