1. 程式人生 > >java基礎之繼承

java基礎之繼承

Java 繼承

  1. 清楚繼承的主要作用和相關限制。
  2. 繼承性的相關限制以及使用規則。
  • 繼承的實現

   class  子類  extends  父類 {}

   子類又被成為派生類,父類也被稱為基類(超類),

子類可以繼承父類中的所有方法,實現程式碼重用,

子類可以拓展方法,在子類內部重新定義新的方法

  1. java不允許新的繼承
  2. 為了滿足一個子類繼承多個父類的需要,可以使用多層繼承。

  例:多層繼承:

  Class a{}

  Class b extends a{}

  Class c extends b{}

  1. 子類在繼承父類的時候,將會繼承父類中的全部操作。子類對父類中的私有操作屬於隱式繼承,非私有操作屬於顯示繼承。  

  例:

class A{

  private String msg;

  public void setMsg(){

     this.msg = msg;

  }

  public void getMsg(){

    return this.msg;

  }

}

class B extends A{

  public void fun(){

     System.out.println(msg);

  }

}

public class day08 {

    public  static void main(String args[]){

B b = new B();

b.setMsg("hello");

 System.out.println(b.getMsg)

}

}

在以上程式中,主程式在例項化B之後,能夠呼叫A中的方法對A中的私有屬性msg進行賦值,但是,在子類B中卻不能輸出父類A中的私有屬性,

  1. 在子類物件構造之前一定會預設呼叫父類的構造(預設使用無參構造),以保證父類的物件先例項化,而後再例項化子類物件。如果父類中沒有無參構造方法,那麼就必須使用super()呼叫父類中的有參構造方法。
  1. super()與this()不能同時出現,子類物件的構造方呼叫之前一定先呼叫父類中的構造方法,為父類的物件初始化之後,才輪到子類初始化。
  • 方法的覆寫

繼承性的主要特徵是子類可以根據父類已有的功能進行功能的拓展,但是在子類定義屬性或者方法的時候, 有可能與父類中的屬性或方法重名。在這種情況下,我們稱之為子類覆寫了父類的方法。

當子類定義了與父類方法名稱相同,引數的型別及個數 返回值相同的方法時,我們就成為發生了方法的覆寫。

覆寫的使用原則(被動):

  如果發現父類中的方法名稱功能不足(不適合本子類),但是又必須使用這個方法名稱的時候,就必須要採用覆寫。

被子類所覆寫的方法不能夠擁有比父類更嚴格的訪問控制權限

Super.方法()與this.方法()的區別:

  1. 使用“this.方法.()”會首先查詢本類中是否存在有要呼叫的方法名稱,如果存在則直接呼叫, 如果不存在,查詢父類中是否存在此方法,如果有就呼叫,如果沒有就會發生編譯時的錯誤。
  2. 使用“super.方法.()”,明確的表示呼叫的不是子類方法(不在子類中查詢是否存在該方法),而直接呼叫父類中的指定方法。

過載與覆寫的區別?

 編號

區別

             過載

覆寫

1

英文單詞

Overloading

   Overrider

2

發生範圍

發生在一個類中

發生在繼承關係中

3

定義

方法名稱相同,引數的型別以及個數相同

方法名稱相同,引數的型別、個數相同,返回值相4同

4

許可權

沒有許可權限制

子類中被覆寫的方法不能擁有比父類更嚴格的訪問控制權限

在使用過載的時候,返回值能否不同?

在發生過載關係的時候,返回值型別可以不同。但是為了保護程式的統一性,過載時儘量保證方法返回值的統一性。

  • 屬性的覆蓋

   如果說現在子類定義了和父類完全相同的屬性名稱的時候,就成為屬性的覆蓋。

  • 繼承關係中this與super的區別

Super.方法()與this.方法()的區別:

  1. 使用“this.方法.()”會首先查詢本類中是否存在有要呼叫的方法名稱,如果存在則直接呼叫, 如果不存在,查詢父類中是否存在此方法,如果有就呼叫,如果沒有就會發生編譯時的錯誤。
  2. 使用“super.方法.()”,明確的表示呼叫的不是子類方法(不在子類中查詢是否存在該方法),而直接呼叫父類中的指定方法。

  編號

區別

this

  Super

1

    功能

呼叫本類中的方法、屬性

呼叫父類中的方法和屬性

    2

    形式

先查詢本類中是否存在指定的呼叫結構,如果有,就直接呼叫,如果沒有就在父類中呼叫

不查詢子類,直接在父類中呼叫

    3

特殊

表示本類中的當前物件

 不能單獨使用