我无法将值发送到基类构造函数

时间:2018-06-26 10:04:42

标签: java inheritance

我在以下图像中附加了我的代码段。我这里有两节课。一个是基类,另一个是子类。这两个类都有自己的构造函数。我已经在测试类中创建了基类和子类的对象,并向构造函数发送了一些值。当我编译程序时,出现错误,指出“类中的构造函数无法应用于给定类型”,原因是“实际和形式争论的长度不同”。为什么会出现此错误?

class base {
    int a;
    int b;
    base(int w, int x) {
        a = w;
        b = x;
    }
    public void display() {
        System.out.println("value of a is: " + a);
        System.out.println("value of b is: " + b);
    }
}
class sub extends base {
    int c;
    int d;
    sub(int y, int z) {
        c = y;
        d = z;
    }
    public void display() {
        System.out.println("value of a is: " + c);
        System.out.println("value of b is: " + d);
    }
}
class test {
    public static void main(String[] args) {
        base b1 = new base(10, 20);
        sub s1 = new sub(30, 40);
        b1.display();
        s1.display();
    }
}

1 个答案:

答案 0 :(得分:-1)

在基类中创建默认构造函数。

您的子类构造函数隐式调用基类的默认构造函数。

如果要使用子类元素初始化基类,则可以从子类构造函数中调用super(int, int)

在上面的示例中,您可以按以下方式使用

 sub(int y, int z) {
  super(y,z);
    c = y;
    d = z;
}

在这种情况下,基类具有与传递给子类相同的值。

如果您不从子类构造函数调用super(int, int),则会在内部调用基类的默认构造函数,如下所示:

sub(int y, int z) {
  super();
    c = y;
    d = z;
}