【问题标题】:I am not able to send values to the baseclass constructor我无法将值发送到基类构造函数
【发布时间】:2018-12-05 00:20:14
【问题描述】:

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

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();
    }
}

【问题讨论】:

  • 以文本形式发布代码并写下适当的问题。
  • 不要发布代码图片。将相关代码直接复制粘贴到问题中。提供足够的代码让我们能够理解和复制问题。还要解释您的问题是什么并提供您可能遇到的任何错误消息
  • 你不应该只给出代码的图片,而是文本版本,这样我们就可以运行它。另外,你的问题是什么?
  • 您应该添加您遇到的问题的代码
  • @Krishnaprasad1 很简单,将代码复制粘贴到问题中,全选,然后按编辑器上方的第五个图标(或直接按 CTRL+K)。请删除这些图像并将代码作为文本发布。

标签: java inheritance


【解决方案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;
}

【讨论】:

  • 我修改了代码。它编译和执行没有错误。执行继承时是否需要创建默认构造函数?为什么要在基类中显式创建默认构造函数?
  • @Krishnaprasad1 不...不需要默认构造函数。您只需要根据您在超类中定义的构造函数调用super();。在您的情况下,sub(int x,int y){ super(x,y); } 就足够了。
  • 是的@L.Spillner,但那是我创建子类对象的时候。但是当我创建只有超类的对象时?在您的情况下,我应该创建子类的对象并将值从子类发送到超类!但我需要通过创建超类对象而不是创建子类对象来直接将值发送给超类。
  • 另外,我不得不提一下:这个答案很容易放在评论中。
  • @Krishnaprasad1 base 类保持原样。不需要默认构造函数。当子类被实例化时,它需要创建它的超类,这意味着如果基类没有非零构造函数,则每次都必须调用super(var1, var2, ...)。我会尽快提供正确的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多