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) }构造方法中,并没有直接调用父类的无参构造方法,可以通过反编译软件查看