18-Java类之间的关系
Java中类之间的关系
Java中类与类之间的关系主要有四种:泛化关系、实现关系、关联关系和聚合关系
其中泛化关系就是我们熟知的继承关系
实现关系就是实现类和接口之间的关系,一种特殊的泛化关系
1、关联关系
/*
*
* 1.泛化关系: 类与类之间的继承、接口与接口之间的继承关系
* (UML用空心实线三角形箭头指向父类)
*
* 2.实现关系: 类实现接口的关系
* (UML用空心虚线三角形箭头指向接口)
*
* 3.关联关系: 类与类之间的连接,一个类能知道另一个类的属性和方法,使用成员变量体现
* (UML用实线箭头指向被访问类,也可双向访问)就像是少了继承之间的多态一样
*/
package v关联关系;
public class Me {
//Filed
String name;
//在当前类中含有其他类的引用
//在当前对象中含有其他对象的引用
//朋友
Friend f;//Me和Friend关联关系。。。这里的f既是一个成员变量也是一个Friend类型的引用,
//f就是Friend给Me的一个联系方式,通过创建Me的一个对象用其引用访问f,再用保存Friend对象引用的f访问
//Friend对象的属性和方法,就像现实生活中我给朋友的一个联系方式f,朋友通过f得知我的信息
//前提是创建一个我跟一个朋友,即创建两个类的对象
public Me(Friend f){
this.f=f;
}
public Me(String name) {
// TODO 自动生成的构造函数存根
this.name=name;
}
}
package v关联关系;
public class Friend {
String name;
String addr;
String tel;
Me me;
public Friend(String addr){
this.addr=addr;
}
public Friend(Me m) {
this.me=m;
}
}
package v关联关系;
public class Test {
public static void main(String[] args){
Friend f = new Friend("广西贺州");
//建立关联关系
Me m = new Me(f);
System.out.println(m.f.addr);
Me me = new Me("哈沙科i");
Friend friend = new Friend(me);
System.out.println(friend.me.name);
}
}
2、聚合关系
/*
* Classroom是整体
*/
package v聚合关系;
import java.util.List;
public class Classroom {
int classid;
//Classroom和List集合属于关联关系,在同一层级上
//Classroom与Student属于聚合关系,一个是整体,一个是部分
//List<Student>表示学生的集合,有很多学生
List<Student> stus;//每一个Student就是部分
//聚合关系:整体不依赖部分,部分也不依赖整体
//整体无法决定部分的生命周期
public Classroom(List<Student> s) {
// TODO 自动生成的构造函数存根
this.stus=s;
}
public Classroom(int id) {
// TODO 自动生成的构造函数存根
this.classid=id;
}
}
/**
class Person{
//人和List是关联关系
//人和四肢是合成关系,人是整体,四肢是部分
//合成关系和聚合关系是相似的
//区别的地方:整体和部分是紧密相连的,整体的生命周期决定部分的生命周期
List<Hands> s;
}
*/
package v聚合关系;
public class Student {
String name;
int id;
Classroom classroom ;
public Student(Classroom classroom) {
// TODO 自动生成的构造函数存根
this.classroom=classroom;
}
public Student(String name) {
// TODO 自动生成的构造函数存根
this.name=name;
}
}
package v聚合关系;
import java.util.List;
public class Test {
public static void main(String[] args) {
Classroom classroom = new Classroom(1602052);
Student student = new Student(classroom);
System.out.println(student.classroom.classid);
// Classroom classroom1 = new Classroom((List<Student>) new Student("hshfgjha"));
Student student1 = new Student("hshfgjha");
System.out.println(student1.name);
//System.out.println(classroom1.student1.classid);
}
}