天天看點

青出于藍-了不起的繼承類 | 帶你學《Java面向對象程式設計》之三十六

上一篇:領略String完美側顔-其他操作方法 | 帶你學《Java面向對象程式設計》之三十五

【本節目标】

通過閱讀本節内容,你将了解到繼承的作用以及繼承在實際生活中的含義,學會使用extends實作類的繼承,使用繼承類調用父類的相關屬性與方法。

面向對象的第二大特征就是繼承性,繼承性的主要特點在于:可以擴充已有類的功能。

繼承問題引出

所謂的良好的代碼指的是結構性合理、适合于維護、可重用性很高,但是如果現在隻按照之前所學習到的概念進行程式的定義,那麼不可避免要面對重複問題,下面定義兩個類:人類、學生類,如果按照傳統定義,則結構如下:

Person.java類:

class Person {
   private String name ;
   private int age ;
   public void setName(String name ) {
       this.name = name ;
   }
   public void setAge(int age) {
       this.age = age ;
   }
   public String getName() {
       return this.name ;
  }
  public String getAge() {
      return this.age ;
  }
}           

Student.java類

class Student {
   private String name ;
   private int age ;
   private String school ;
   public void setName(String name ) {
       this.name = name ;
   }
   public void setSchool(String school) {
       this.school = school ;
   }
   public void setAge(int age) {
       this.age = age ;
   }
   public String getName() {
       return this.name ;
   }
   public String getSchool() {
       return this.school ;
   }
   public String getAge() {
       return this.age ;
   }
}           

這個時候可以發現雖然類的概念可以解決結構性的問題,但是對于之前的開發的程式代碼總能夠發現有一些重複的代碼出現在程式之中,并且可以進一步去思索一下關系:學生是一個人,人是一個更加廣泛的定義範疇,而學生是一個相對狹小的定義範疇。從另外一個角度來講,學生之中應該包含有人的所有特點。

如果要想進行代碼的重用,那麼就必須使用繼承的概念來解決,所謂的繼承的本質:在已有類的功能上繼續進行功能的擴充。

繼承的實作

如果在Java程式之中要想實作繼承關系,那麼就必須依靠extends關鍵字來完成,此關鍵字的具體文法如下:

class 子類 extends 父類 {}

特别需要注意的是,很多情況下會把子類稱為派生類,把父類稱為超類(SuperClass)。

範例:觀察繼承的實作

class Person {
   private String name ;
   private int age ;
   public void setName(String name ) {
       this.name = name ;
   }
   public void setAge(int age) {
       this.age = age ;
   }
   public String getName() {
       return this.name ;
   }
   public String getAge() {
       return this.age ;
   }
}
class Student extends Person {           //student是子類
    //在子類之中不定義任何的功能
}
public class JavaDemo{
   public static void main(String args[]) {
       Student stu = new Student() ;
       stu.setName(“林大強”) ;     //父類定義
       stu.setAge(38) ;     //父類定義
       System.out.println(“姓名:” + stu.getName() + “、年齡:” + stu.getAge()) ;
   }          //姓名:林大強、年齡:38
}           

由于此時存在有繼承關系,是以此時的子類即便沒有定義任何操作,也可以直接通過父類繼承而來的方法實作相應功能。而這個時候記憶體關系圖如下:

青出于藍-了不起的繼承類 | 帶你學《Java面向對象程式設計》之三十六

圖一 記憶體關系圖

繼承實作的主要目的是在于子類可以重用父類中的結構,并且也可以實作功能的擴充,那麼同時強調了:子類可以定義更多的内容,并且描述的範圍更小。

範例:子類擴充定義

class Person {
   private String name ;
   private int age ;
   public void setName(String name ) {
       this.name = name ;
}
public void setAge(int age) {
       this.age = age ;
}
public String getName() {
    return this.name ;
}
public String getAge() {
    return this.age ;
}
}
class Student extends Person {           //student是子類
   private String school ;
public void setSchool(String school) {
    this.school = school ;
}
public String getSchool() {
       return this.school ;
}
}
public class JavaDemo{
   public static void main(String args[]) {
       Student stu = new Student() ;
       stu.setName(“林大強”) ;     //父類定義
       stu.setAge(38) ;     //父類定義
       stu.setSchool(“家裡蹲大學”) ;
       System.out.println(“姓名:” + stu.getName() + “、年齡:” + stu.getAge() + “、學校:” + stu.getSchool()) ;
}          //姓名:林大強、年齡:38、家裡蹲大學
}           

如果此時繼續讨論記憶體關系,則就會出現兩個範圍的屬性了(Person父類範疇、Student子類範疇)。

青出于藍-了不起的繼承類 | 帶你學《Java面向對象程式設計》之三十六

圖二 記憶體分析圖二

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:先雞後蛋-繼承類執行個體化分析 | 帶你學《Java面向對象程式設計》之三十七 更多Java面向對象程式設計文章檢視此處