为什么这段代码会将错误作为实际的形式参数?

时间:2017-07-06 10:45:34

标签: java

 class A {
    int a, b;

    A(int i, int j) {
        a = i;
        b = j;
    }
}

class B extends A {
    int c, d;

    B(int i, int j) {
        c = i;
        d = j;
    }
}

public class HelloWorld {

    public static void main(String[] args) {
        A aa = new A(5, 6);
        B bb = new B(3, 4);
        System.out.println(aa.a + aa.b + bb.a + bb.b + bb.c + bb.d);

    }
}

它给出错误

HelloWorld.java:9: error: constructor A in class A cannot be applied to given types;                                                                                 
{                                                                                                                                                                    
^                                                                                                                                                                    
  required: int,int                                                                                                                                                  
  found: no arguments                                                                                                                                                
  reason: actual and formal argument lists differ in length                                                                                                          
1 error 

2 个答案:

答案 0 :(得分:0)

当您上课B 扩展A时,您必须调用正在扩展的类的构造函数。

由于您的类A没有无参数的构造函数,您需要显式调用超级构造函数(类A中的构造函数)作为第一个语句在班级B的构造函数中:

B(int i, int j) {
  super(i, j);
  // Your code
}

如果在A中有一个no-args构造函数,则不需要这样做,因为如果没有指定构造函数调用,则 no-args构造函数被隐式调用:

B(int i, int j) {
  // Your code
}

实际上在做:

B() {
  super();
  // Your code
}

由于您没有A()作为构造函数,因此会出现错误。

答案 1 :(得分:0)

检查一下...... JVM总是在寻找没有参数的构造函数。

class A {
    int a, b;

    A(int i, int j) {
        a = i;
        b = j;
    }

    public A() {
        // TODO Auto-generated constructor stub
    }
}

class B extends A {
    int c, d;

    B(int i, int j) {
        c = i;
        d = j;
    }
}

public class pivot {

    public static void main(String[] args) {
        A aa = new A(5, 6);
        B bb = new B(3, 4);
        System.out.println(aa.a + aa.b + bb.a + bb.b + bb.c + bb.d);

    }
}