参数未通过构造函数传递


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

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

我在这里做错了什么?

所以我的猜测是你还没有弄清楚物体是什么。如果你看一下JDK代码,你会看到定义对象的类示例java.lang.String,java.lang.Integer,java.lang.StringBuilder是你可以查看的类,以了解对象是什么。一旦你看到其中一些类是如何工作的,你就可以了解其余部分背后的动机。

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

"实例"是指对象的一次出现。我们使用构造函数实例化对象。

您的方法如

public double volume(){

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

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

静态变量是公共变量,与访问器同名。如果调用不带括号的成员,则直接调用变量。如果使用括号,则将调用访问器。.

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

最新更新