父子類 執行順序
public class Dervied extends Base { private String name = "dervied"; //構造方法 public Dervied() { this.tellName(); this.printName(); } //子類方法 public void tellName() { System.out.println("Dervied tell name: " + name); } public void printName() { System.out.println("Dervied print name: " + name); } public static void main(String[] args){、 new Dervied(); } } class Base { private String name = "base"; public Base() { this.tellName(); this.printName(); } public void tellName() { System.out.println("Base tell name: " + name); } public void printName() { System.out.println("Base print name: " + name); } }
--------------------------------
結果:
Dervied tell name: null Dervied print name: null Dervied tell name: dervied Dervied print name: dervied
結果分析:
1. 在建立子類物件時會先呼叫父類的構造器
2.子類重寫了父類中的tellName()與printName(),相當於將父類的方法完全改變;
所以在執行父類的構造方法時輸出“Dervied tell name:”與“Dervied print name:”由於父類中的name屬性由private,被private修飾的屬性只能在本類中被訪問所以前兩行會輸出null