对象的关联关系
我们现在有了一些面向对象的基本认知了,至少包括:需要在问题域当中寻找对象,定义
类,new对象,调用对象的属性和行为了。
在实际开发中,我们遇到的很多问题不是某一个对象单独解决的,而是可能由多个不同类型
的对象协作完成的,那么我们就需要在复杂问题域当中去设计他们的关联,让他们能够协同。
对象的三种关联关系
1. has-a 关系
顾名思义: 有一个。
指的是在一个对象的内部“拥有”另一个对象
2. use-a 关系
用一个。
指的是在一个对象的某个方法当中“使用”另一个对象
3. is-a 关系
是一个。
指的是一个对象是另外一种对象的特例。
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."
原因:
1. 利用IDEA工具,书写上"this."以后,可以自动联想出本类的属性和方法,提高编
程速度;
2. 它可以区分局部变量和属性重名的情况;
对于"this."的使用,我们要分情况:
1. 如果出现局部变量和全局变量重名,我们又需要特指全局的时候,那么就一定要用"this.";
2. 如果没有出现上面的这种情况,加不加"this."就看程序员个人的使用习惯,或你服务的公
司的代码规范了。
包
当我们的程序越来越大,里面包含的类越来越多,那么我们就需要一种结构能够帮助
我们分门别类的存放这些类,以达到更好的管理。于是,有了“包”的概念。
包的命名规范:全小写
包在本质上大家就把它想成是专门用来存放java类的文件夹。当一个java类被放入到
某个包当中的时候有以下几个特点:
1. 在这个类的最高处要增加一句包申明的代码,使用关键字"package",后面跟上包
的名字。
比如:package com.lovo.test;
2. 在默认情况下,一个java类只能访问来自于同一个包的其他java类。如果需要访
问其他包的类,那么需要使用关键字“import”,把那个类导入进来。
比如:import com.lovo.practise.Car;
可以使用 import com.lovo.practise.*; 导入practise包下面所有的java
类,但是不建议这么做,最好的方式是需要用谁才导入谁。
3. 在IDEA工具中,具有多种创建包或创建类的方式,需要大家逐步的熟悉。
当局部变量和属性出现重名的时候,在默认情况下,直接书写"name",永远指的是离
它声明最近的局部变量name,而不是属性name;
这种情况下,用"this.name"就特指当前对象的name,当然就是全局的这个了。
普遍问题:
1、定一个类就创建一个独立的Java文件,千万不要在一个类里面定义另一个类;
在一个类里面定义另一个类 --- 这种叫做"内部类",这是Java中高阶语法;
它描述的内部类与外部类是有特定关系的,使用语法也和普通类完全不同。
2、命名规范:
类名 -- 名词,首字母大写,后面每个单词的首字母也要大写 ---
形如: AaaaBbbbCccc
变量名 --- 无论属性还是局部变量,名词,第一个单词全小写,后面每个单词的首字母大写 ---
形如:aaaaBbbbCccc
常量名 --- 名词,所有字母使用全大写,单词与单词之间用"_"分隔 ---
形如:AAAA_BBBB_CCCC
方法名 --- 动词,千万不要使用类名做方法名,第一个单词全小写,后面每个单词的首字母大写 ---
形如:aaaaBbbbCccc