1. 程式人生 > 其它 >has-a、use-a、is-a的關係說明

has-a、use-a、is-a的關係說明

技術標籤:java

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

      然後有個學生類,它繼承了人的類,所以它擁有人類的屬性和方法,它也擁有姓名、性別和年齡,還有介紹自己的方法,同使它能擁有自己獨特的屬性,例如學號和專業,還有自己可以上課的方法。所以繼承既可以繼承父類的屬性和方法,同時子類也能擴充套件自己獨特的屬性和方法。