参数未通过构造函数传递

时间:2021-04-22 03:22:33

标签: java class constructor parameter-passing

abstract class shape{
    public double volume;
    public double surface;
}

class cube extends shape{

    public static double side;
    public static double newSide;

    cube(double newSide){
        side = newSide;
        }

    public double volume(){
        return side;
    }

    public double surface(){
        return newSide;
    }
}



public class shapes {

    public static void main(String[] args) {


        cube a = new cube(5);
        System.out.println (a.volume);
        System.out.println (a.surface);
    }

}

这会产生:

0.0 0.0

我通过构造函数传递的参数似乎没有被多维数据集类正确处理。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

所以我猜你还没有弄清楚对象是什么。如果您查看 JDK 代码,您将看到定义对象的类的示例 java.lang.String、java.lang.Integer、java.lang.StringBuilder 是您可以查看的类以了解对象是什么。一旦您了解了其中一些课程的工作原理,您就可以了解其他课程背后的动机。

有对象就有类。我们使用类作为模板来创建对象。每个对象都有自己的状态。例如,您的程序中可以有许多不同的字符串。每个字符串都是一个拥有自己状态的对象,使用自己的实例变量。但是静态变量不属于对象,它们属于类。

“实例”表示一个对象的一次出现。我们使用构造函数实例化对象。

你的方法如

 public double volume(){

被称为访问器或获取器,因为它们用于访问对象的状态。

让实例方法访问器访问静态变量令人困惑。静态成员与实例成员的作用域不同,在此处将它们组合在一起会令人困惑。很难说是什么意图,但你不应该使用静态变量来描述应该特定于实例的状态。

您的静态变量是公共的,并且与访问者同名。如果您调用没有括号的成员,您将直接调用变量。如果您使用括号,您将调用访问器。 .

如果您确实需要静态变量,则不要在构造函数中初始化它们。构造函数用于初始化类的实例,其中静态变量不属于一个实例,而是属于类。使用构造函数设置实例变量,而不是静态变量。