子类初始化时一定要调用父类的构造方法

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

原文地址:https://www.cnblogs.com/uoar/p/7131837.html