1 class Question { //父類 2 private String title; 3 private String[] options = new String[4]; 4 5 Question(String title,String[] optiongs){ 6 this.title = title; 7 this.options = options; 8 } 9 10 public String getTitle() { 11 return title; 12 } 13 14 public void setTitle(String title) { 15 this.title = title; 16 } 17 18 public String[] getOptions() { 19 return options; 20 } 21 22 public void setOptions(String[] options) { 23 24 this.options = options; 25 } 26 27 }
下面是子類
class SingleQusetion extends Question{ //單選題類 private char answer; //單選題答案屬性 public char getAnswer() { return answer; } public void setAnswer(char answer) { this.answer = answer; } SingleQusetion(char answer,String title,String[] options){ //單選題構造函數 super(title,options); //這里必須要調用父類的構造函數,調用父類的構造函數時父類里的this.title等無法對此處子類進行初始化,所以就無法獲取子類構造函數里傳進來的title等參數,無法進行初始化賦值,最終打印出來的結果為null this.setTitle(title); //這里對傳進來的參數進行初始化賦值 this.setOptions(options); this.answer = answer; } }
還有一個困惑,假設父類沒有有參構造方法,子類的構造方法里不一定會有super();方法 ,
public class Test2 extends Test3 { int age; Test2(){ this(3); } Test2(int age){ this.age = age; } public static void main(String[] args) { System.out.println("a"); } } class Test3{ }
上面的Test2(){ this(3) }構造方法中,並沒有直接調用父類的無參構造方法,可以通過反編譯軟件查看