Java - 扩展问题

Big*_*igE 3 java extends

嘿伙计们,我正处理一个带有"扩展"问题的地狱问题我正在研究的问题集中的问题 - 我想我只是因为它被写成有目的地混淆了.这是我得到的问题:

class A {
    int x;
    A(int a) {System.out.println(" class A");}
}

class B extends A {
   int x;
   B() {System.out.println(" class B");}
   public static void main (String [] args) {
    A a = new B();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我从控制台中得到以下错误:

cannot find symbol
symbol  : constructor A()
location: class A
   B() {System.out.println(" class B");}
       ^
Run Code Online (Sandbox Code Playgroud)

而且我应该能够在没有触及A类的情况下修复B级中的这个错误.我显然错过了一些愚蠢明显的东西,但我已经尝试了一小时内我能想到的所有东西的排列而没有任何工作.

到目前为止,我已经尝试过:

  • 在B()前面抛出一个空洞 - 同样的错误.
  • 将B()转换为A(int a) - 后者返回时出现无效的方法声明错误(在它前面添加一个void,将我踢回原来的"找不到符号"错误)
  • 制作B()B(int a) - 同样的错误,加上抛出一个额外的"找不到符号"错误,因为我现在已经删除了B()声明.
  • 使B类扩展A到B类扩展A(int A) - 抛出9个错误.显然不是答案.
  • 将A的类名更改为Apple只是为了看看是否会给我一个答案 - 这要我在Apple类的A(int a)前添加一个空格,这是我无法做到的.

我到底在这里错过了什么?这不是一个高级课程,所以它不能是一个非常复杂的东西,但这让我完全疯了.任何帮助将不胜感激.

Ano*_*on. 5

在派生类中,您需要调用基类构造函数.如果不明确地执行此操作,编译器将尝试插入对无参数构造函数的调用 - 如果基类中不存在,则会出现该错误.

解决方案是使用一些值显式调用基类构造函数:

B() {
    super(0);
    System.out.println(" class B");
}
Run Code Online (Sandbox Code Playgroud)