has-a、use-a、is-a的关系说明

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);
          }
      }
      

      然后有个学生类,它继承了人的类,所以它拥有人类的属性和方法,它也拥有姓名、性别和年龄,还有介绍自己的方法,同使它能拥有自己独特的属性,例如学号和专业,还有自己可以上课的方法。所以继承既可以继承父类的属性和方法,同时子类也能扩展自己独特的属性和方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值