【问题标题】:Constructor not accepting parameter being passed through it [closed]构造函数不接受通过它传递的参数[关闭]
【发布时间】:2021-04-23 03:48:17
【问题描述】:
public abstract class shape {
    protected double volume;
    protected double surface;
}

public class cube extends shape {
    public double side;
    public double newSide;

    public cube(double side) {
        side = newSide;
    }

    public void volume(double newSide){
        System.out.println (newSide);
    }
}

public class shapes {
    public static void main(String[] args) {
        cube a = new cube(5);
        a.volume();
    }
}

这会输出错误:

constructor cube in class cube cannot be applied to given types;
cube a = new cube(5.5);
required: double
found:    no arguments
reason: actual and formal argument lists differ in length

我将所有变量都设置为双倍,所以不知道为什么会抱怨。

【问题讨论】:

  • 您将newSide 分配给side,鉴于您的参数是side,它基本上什么都不做。我相信你的意思是在你的构造函数中做this.side = side
  • 如果我做 public cube(double side) { this.side=side;} 我会收到同样的错误。
  • 给出错误的不是构造函数调用,而是volume() 调用。
  • 请同时发布您的代码用途。以便其他人能够理解并提供解决方案。

标签: java types constructor abstract


【解决方案1】:

首先,您的构造函数是错误的。应该是

public cube(double side) {
        this.side = side;
    }

您收到错误是因为您设置了这样的音量参数 -

 public void volume(double newSide){
        System.out.println (newSide);
    }

改成

public void volume(){
    System.out.println(side);
}

在 java 中,您应该始终将类名大写。应该是多维数据集。

【讨论】:

  • 我试过这个,它产生了完全相同的错误。
  • ??它对我有用:onecompiler.com/java/3wve2kxsu
  • 这太奇怪了。我实际上复制并粘贴了你在那里所做的事情,它提出了同样的错误。
  • 好的,我用你的替换我的主课。就像我删除了文件并创建了一个新文件一样,它起作用了!我看到在我的 shape 类下有 Main 类,这就是它不起作用的原因吗?
  • 你里面有main方法的类必须与文件名匹配。这也是为什么类名必须使用大写字母的原因。在您的情况下,它将是 Shape.java,因为您的主要方法在 Shape 类下。
【解决方案2】:
  1. 由于您没有通过继承 Shape 类做任何事情,所以我忽略了该类。
  2. 正如JordanKobeWade 所说,您在构造函数中错误地进行了赋值,并且您使用参数声明了volume 方法,但您在没有参数的情况下调用了它。然后你得到了一个错误。
  3. 如果您的目的只是将一个值传递给另一个类并打印它,那么下面的代码就可以了。

Cube.java

public class Cube {

public double side;

public Cube(double side) {
    this.side = side;
}

public void volume(){
    System.out.println (side);
}

}

And Shapes.java

public class Shapes {

public static void main(String[] args) {
    Cube a = new Cube(5);
    a.volume();
}
}

【讨论】:

  • 谢谢。你是什​​么意思,我没有通过继承 Shapes 类做任何事情。它是一个抽象类。我的理解是它除了声明未定义的方法和变量以扩展到子类之外什么都不做。这不正确吗?我做了什么?
  • 你是对的。但是,我想说的是,您应该声明一些可以由子类方法实现的抽象方法。这样你就完成了它的目的。因为我没有使用子类中的变量,它们是在超类中声明的。
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多