java中的继承(编译错误)

Tof*_*fiq 1 java oop

这是我的计划:

class A{
    A(int a){
    }

class B extends A{
    B(){    
    }
}

}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我有一个错误:

C:\Users\Public\Documents\AB.java:6: error: constructor A in class A cannot be applied to given types;
    B(){
       ^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length
Run Code Online (Sandbox Code Playgroud)

它由我的代码中的此更改修复:

    class A{
        A(int a){
        }
            A(){
        }

    class B extends A{
        B(){
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么?

谢谢你的帮助.

Sot*_*lis 6

因为你的A类声明了一个构造函数

A(int a){
}
Run Code Online (Sandbox Code Playgroud)

那么任何想要实例化的代码都A需要使用该构造函数来实现.就像是

A a = new A(42);
Run Code Online (Sandbox Code Playgroud)

您还声明了一个子类B.因为它B是一个A,除了它的构造函数,它必须调用父类的构造函数.这是由编译器隐式完成的.说你有

class A{
    A(){
    }

class B extends A{
    B(){
        // super(); injected by compiler
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你没有no-arg构造函数,那么编译器不知道要注入哪个构造函数.您需要明确声明super(...)调用.

class A{
    A(int a){
    }

class B extends A{
    B(){    
        super(42);
    }
}
Run Code Online (Sandbox Code Playgroud)

可以这样想:没有构造A函数调用就无法构造一个.当你构造一个B,你通过继承,也构造一个A,所以你需要相同的构造函数调用.