对象的关联关系

相信大家对面向对象有了一些基本认知,至少知道:需要在问题域中找对象,定义类,new对象,调用对象的属性和行为。

在实际的开发过程中,我们遇到的很多问题不是某一个对象单独能够解决,而是可能由多个不同类型的对象协作完成的,那么我们就需要在复杂的问题域中去设计(找)他们的关联,让他们能够合作。

三种对象的关联关系

has - a 关系

顾名思义:有一个

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

use - a 关系

用一个

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

is - a 关系

是一个

指的就是一个对象是另外一种对象的特例

其中,今天我们学习前两个(has-a 有一个、use-a 用一个),在后续章节(继承)时讲解

has-a 关系 有一个

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

例子:张三 有 钱包 (张三 属于人这个类型的对象 钱包 属于 钱包这个类型的对象)

此时 关联--- 单向关联 和 双向关联

A has a B 或者 B has a A 单向关联 A 中有B 或者 B中 有A

A has a B 且 B has A 双向关联 A中有B 且 B中有A

把对方 设计为自己的属性后,有一个特点,那就再当前对象的所有方法中我就可以访问到关联对象

换句话说,两个对象的生命周期时保持一致的,这就是你中有我,我是你的一部分。

到底 has a 关系 到底时设计为双向 还是 单向,取决于对问题与的分析。如果说再问题域场景中,我只需要通过

A找B或B找A,那么我就设计为单向,如果在问题域中,既要通过A找B,也要通过B找A,那么就是设计为双向

use-a 关系 用一个

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

该变量 可以通过 参数传递进这个方法,其实与可以在方法内部去new一个,两者不管采用哪一种方式都是use-a关系。因为不管是参数传递还是方法内部声明定义,都是方法局部变量,方法结束,局部变量消失,关系就会解除。

// 场景:主人喂猫 主人由喂猫的行为,猫也有 主人喂食,就给撸给包给亲亲的行为

以后完成场景练习时,注意什么时候把对方设计为属性,一定要在问题域找到什么拥有这个词汇,此时表示has关系,那么他们的生命周期就一致,我们就可以在很多方法中用它,而不是产生一个用完就丢

如果分析出来是use-a关系,请把它设计为对方的一个方法局部变量

包 和 this 关键字

this关键字

学到目前位置,如果在类中定义属性和行为,都需要通过""对象名."的方式去访问属性或行为。因为同一个类可以产生多个对象,我们必须明确的告知计算机,操作的哪一个对象的属性,哪一个对象的行为。

在类的内部方法中,访问当前类的属性或者调用自己的某个方法,也有一个默认的对象,---用 this 表示。

这个”this“ 表示的是 ”当前对象“,相当于”我”的含义。

那么谁是当前对象呢?谁调用这个方法谁就是“当前对象”

有同学可能会说:“在目前代码中,用或者不用this,没什么变化,会觉得this的用处不大”,因为根据作用域,就算不写this也可以访问本类中的属性或者调用本类中的方法。

但是建议大家,在书写代码时,只要是访问本类的属性或方法就加上“this”。

原因:

1.利用集成开发环境(IDEA),书写上this后,可以自动联想出本类的属性和方法,提高编码速度

2.它可以区分局部变量和属性重名的情况,如果出现局部变量和属性重名的情况,要表示全局变量,一定要是用this

当我们的程序越来越大时,里面包含的类越来越多,那么我们更好的去管理类,以及对类进行分门别类的进行存放,我们就需要有一种结构帮助我们。于是“包“就诞生了。

包:本质其实就是一个用于放Java类的文件夹,当一个Java类被放入到某个包中时,会有以下特点:

1.在这个类的最上面 会有一句 申明包的代码,代码格式:关键字 package 后面加上 包名即可

包名的书写规范:1全小写,如果包有多级结构,包名1.包名2.包名3

2.在默认情况下,一个Java类只能访问同一个包中的其他Java类,如果需要访问其他包的类,那么需要使用

关键字 import,把那个类导入进来。 import 包名.类名; 就能导入某包中的某类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值