1. 程式人生 > >面向物件程式設計的三大特性(繼承)

面向物件程式設計的三大特性(繼承)

文章目錄

基本含義

建立

繼承語法:
[訪問控制修飾符] [非訪問控制修飾符] class 子類名 extends 父類名{ 類體 }

專案 含義
含義 繼承父類的屬性和方法。
目的 複用程式碼。便於維護。
父類別名 基類或者超類。
特性 單繼承(即子類只有一個父類,父類可以有多個子類)
Object類 Java中,是所有的類的父類。

在這裡插入圖片描述

呼叫父類方法——未被重寫後

語法:super.父類被重寫方法名();
子類重寫父類:

專案 含義
目的 繼承父類時,展現特性。
別名 覆蓋(override)
重寫父類 一大兩小兩同
訪問控制修飾符 不小於父類
非訪問控制修飾符 不限
返回值型別 不大於父類
丟擲的異常類 不大於父類
方法名 與父類相同
引數列表 與父類相同

呼叫父類方法——構造器

語法:
[ 訪問控制修飾符 ] [ 非訪問控制修飾符 ] 類名{ super(引數列表);…}

注意:

  1. 同一構造器中,super(引數)必須放置有效執行方法體首行。
  2. 同一構造器中,super(引數)只能出現一次。
  3. 同一構造器中,super(引數)必須出現一次。
  4. 同一構造器中,super只能出現在子類的方法體中。
  5. 同一構造器中,只能引用一個構造器。
  6. 同一構造器中,this(引數)和super(引數)只能出現一個。

特別提醒:
若父類顯式宣告只有有參構造器,而子類未呼叫顯式有參構造器,則會出錯。

具體操作

主函式入口原始檔:

public class MainEntrance{
  public static void main(String[] args){ 
    Rabbit rb = new Rabbit("小白兔", 1, 3, "雄");
      // 封裝屬性呼叫:
      System.out.println(rb.getName()); // 外部類呼叫,子類的父類的封裝屬性。
      // rb.setLegNumber();
      System.out.println(rb.getAge()); // 
      rb.eat();
  }
}

動物類原始檔:

public class Animal{
  // 封裝屬性:動物共性,名字和年齡。
  private String name;
  private int age;
  /* 構造器:無參。
   * 被呼叫:子類構造器必須呼叫父類構造器。
   * 此處目的:防止子類沒有呼叫父類有參建構函式時,報錯情況發生。
   * 
   */ 
  public Animal(){  
  }
  public Animal(int age){
    // 封裝屬性呼叫:本類中,this.私有變數名。
    this.age = age;
  }
  public Animal(String name, int age, String sex){
    // 封裝屬性呼叫:本類中,this.私有變數名。
    this.name = name;
    this.age = age;
    this.sex = sex;
  }
	  
  // 物件方法:
  public void eat(){
    System.out.println(this.name + "也需要吃東西" );
  }
  public void sleep(){
    System.out.println(this.name + "已經" + this.age + "歲了!");
  }
  public void life(){
    System.out.println("每個動物都有宣告!");
  }
	  
  // set和get方法:通過建立此兩種方法,讓外部類訪問被封裝的屬性。
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
}

兔子類原始檔:

public class Rabbit extends Animal{
  private int legNumber;
  /*
  * 構造器
  * 同一構造器中,只能引用一個構造器。
  * 同一構造器中,this(引數)和super只能出現一個。
  * 同一構造器中,super(引數)必須出現一次。
  * 同一構造器中,super(引數)只能出現一次。
  * 同一構造器中,super(引數)必須放置有效執行方法體首行。
  * 同一構造器中,super只能出現在子類的方法體中。
  * 若父類顯式宣告只有有參構造器,而子類未呼叫顯式有參構造器,則會出錯。
  */
  public Rabbit(String name, int age, int legNumber, String sex){		
    super(name,age,sex);
    judgeLegNumber(legNumber);
//	this(legNumber); // 同一構造器中,this(引數)和super只能出現一個。
  }
  // 過載構造器:其它相同,只是引數列表和方法體不同。
  public Rabbit(int legNumber){
    super(legNumber);
  }
	
  // 重寫父類方法:兩大一小兩同原則。
  public void eat(){
    super.eat(); // 呼叫父類的物件方法。
    System.out.println(super.getName() + "是食草動物!"); // 呼叫父類封裝的屬性。
    System.out.println(this.sex + "兔跑得快嗎?"); // 呼叫父類未封裝的屬性。也可省略this。
  }
  // 物件方法:
  public void judgeLegNumber(int legNumber){
    if(legNumber != 4){
       System.out.println("這不是一個正常的兔子!");
    }else{
       this.legNumber = legNumber;
    }
  }
	
  // get方法和set方法:幫助外類獲取封裝的屬性。
  public int getLegNumber() {
    return legNumber;
  }
  public void setLegNumber(int legNumber) {
    this.legNumber = legNumber;
  }	
}