子类继承父类,哪里继承错了︖

img


请问子类哪里继承不对父类︖感谢感谢。为什么这样做︖请给个答案,谢谢啦!

下面是我的理解,供参考:

正确答案是D。

A,错误,是因为子类构造器默认调用父类无参的构造器,在这个例子中,父类Father的构造器是有参的构造器,没有定义无参的构造器,所以子类构造器中需要显式调用父类有参构造器才能通过编译,所以错了.

B,错误,因为子类没有定义带参数的有参构造器,所以错了;

C, 错误, 同B选项一样, 子类没有定义带参数的构造器。

所以,正确答案是D。

测试代码如下:

参考链接:



public class Father {
    int x;
    Father(int a){
        x=a;
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Son s = new Son();
        System.out.println(s.x);
        
        Son s2 = new Son(10);    
        System.out.println(s2.x);
        
        Father s3 = new Son(10);
        System.out.println(s3.x);
        
    }

}

class Son extends Father{
    
    // https://blog.csdn.net/wei_zhi/article/details/52780026
    Son(){ 
        // 因为父类定义了有参的构造器,而没有定义无参的构造器
        // 所以子类需要显式调用父类有参的构造器
        super(2);
    }
    
     Son(int i) {
         // 同上,这里同样显式使用父类的有参的构造器
         super(i);
    }
    
}

img

因为基类只有有参构造函数,没有无参构造函数,而子类只有无参构造函数,因此子类是无法创建的。具体来说,Son类构造时,同时要构造基类对象,但基类构造函数必须要有参,而子类构造无法提供参数,所以实际无法构造子类对象

D Father中只有 Father(int a)这个构造参数而没有无参数的构造参数,所以说在 Son(){} 这里就会报编译错误