Java 繼承和構造函數

2018-06-28 16:08 更新

Java面向對象設計 - Java繼承和構造函數


構造函數不是類的成員,它們不是由子類繼承的。

它們用于初始化實例變量。

class CSuper {
  public CSuper() {
    System.out.println("Inside CSuper() constructor.");
  }
}

class CSub extends CSuper {
  public CSub() {
    System.out.println("Inside CSub()  constructor.");
  }
}

public class Main {
  public static void main(String[] args) {
    CSub cs = new CSub();
  }
}

上面的代碼生成以下結果。


例子

下面顯示了如何編譯器注入一個super()來立即調用父類的無參數構造函數。

class CSuper {
  public CSuper() {
    super(); // Injected by the compiler
    System.out.println("Inside CSuper() constructor.");
  }
}

class CSub extends CSuper {
  public CSub() {
    super(); // Injected by the compiler
    System.out.println("Inside CSub()  constructor.");
  }
}

public class Main {
  public static void main(String[] args) {
    CSub cs = new CSub();
  }
}

上面的代碼生成以下結果。

關鍵字super指的是類的直接父類。

我們可以調用超類構造函數,只使用super關鍵字作為構造函數中的第一個語句。


無參數構造函數

我們可以將超類的no-args構造函數或任何其他構造函數顯式地調用為類的構造函數中的第一個語句。

只有在沒有明確添加的情況下,編譯器才會注入no-args構造函數調用。

class Employee {
  private String name = "Unknown";

  public Employee(String name) {
    this.name = name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

class Manager extends Employee {
  public Manager(String name) {
    super(name);
  }
}

public class Main {
  public static void main(String[] args) {
    Manager mgr = new Manager("Tom");
    String name = mgr.getName();
    System.out.println("Manager name:  " + name);
  }
}

上面的代碼生成以下結果。


每個類都必須直接或間接地從其構造函數中調用其超類的構造函數。

如果超類沒有no-args構造函數,我們必須顯式地調用超類的任何其他構造函數。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號