has-a、use-a、is-a的关系说明
-
has-a、use-a、is-a都是用来表示类与类之间的关系。
-
has-a表示包含关系,是整体与部分的关系,同时它们的生命周期都是一样的。
-
例如:
public class Driver { private String name; private String number; private int drinkStatus; }
public class Car { private String number; private int speed; private Driver driver; }
分别有一个司机类和一个车辆类,车辆类有一个属性是司机类型的属性,这就表示了车辆类包含了司机类。
-
-
use-a表示使用关系,依然是其中一个拥有另外一个,但是不负责销毁,也就是声明周期不一样。
-
例如
public class Police { public void check(Car car){ if(car.getSpeed() > 100){ System.out.println("车辆超速,被拦截。车牌号:" +car.getNumber() +";司机姓名:" +car.getDriver().getName() +";驾照号:" +car.getDriver().getNumber() +";罚款2000,扣6分"); if(car.getDriver().getDrinkStatus() == 1){ System.out.println("发现司机处于饮酒状态,追加罚款5000,拘留12天,扣12分"); } }else{ System.out.println("未超速,放行"); } } }
有一个警察类,他有一个临检的方法,这个方法要输入一个车辆类型的参数,这就是use-a的关系。
-
-
is-a表示继承关系,父类与子类,具有很高的耦合度。。
-
继承关系就是一个子类继承父类,使用关键字extends,子类继承父类后,子类就拥有父类的属性和方法。
-
例如:
public class People { private String name; private int age; private String gender; public People(){} public People(String name,int age,String gender){ this.name = name; this.age= age; this.gender = gender; } public void intro(){ System.out.println("大家好,我的名字叫" + this.name); } }
这里有一个人的类,他有属性姓名、年龄和性别,还有一个介绍自己的方法。
public class Student extends People{ private int number; private String major; public Student(){} public Student(String name,int age,String gender,int number,String major){ super(name,age,gender); this.number = number; this.major = major; } public void lesson(){ System.out.println("我今天要上" + this.major); } }
然后有个学生类,它继承了人的类,所以它拥有人类的属性和方法,它也拥有姓名、性别和年龄,还有介绍自己的方法,同使它能拥有自己独特的属性,例如学号和专业,还有自己可以上课的方法。所以继承既可以继承父类的属性和方法,同时子类也能扩展自己独特的属性和方法。
-