我在做一个问题集时遇到了一个名为“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();
}
}
当我进行编译时,从控制台中出现了以下错误:
cannot find symbol
symbol : constructor A()
location: class A
B() {System.out.println(" class B");}
^
我应该能够在不修改类A的情况下解决类B中的错误。但是很明显,我漏掉了某些非常显而易见的东西,已经尝试了各种组合一个小时了,但都没有效果。
到目前为止,我尝试过:
- 在B()前面加一个void - 仍然报错。
- 将B()改成A(int a) - 后者会返回无效的方法声明错误(在其前面添加一个void会将我带回原始的“找不到符号”错误)。
- 将B()改成B(int a) - 同样的错误,还会导致额外的“找不到符号”错误,因为我现在摧毁了B()的声明。
- 将类B extends A更改为类B extends A(int A)- 报告了9个错误。 显然这不是答案。
- 将类A的类名更改为苹果,只是想看看是否会给我答案 - 这要求我在Apple类中添加void在A(int a)前面,而我不能这样做。
我到底漏掉了什么?这不是一个特别高级的课程,所以不可能是什么复杂的问题,但这让我变得完全疯狂。 希望有人能帮我,非常感谢。