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
我通过构造函数传递的参数似乎没有被多维数据集类正确处理。
我在这里做错了什么?
答案 0 :(得分:1)
所以我猜你还没有弄清楚对象是什么。如果您查看 JDK 代码,您将看到定义对象的类的示例 java.lang.String、java.lang.Integer、java.lang.StringBuilder 是您可以查看的类以了解对象是什么。一旦您了解了其中一些课程的工作原理,您就可以了解其他课程背后的动机。
有对象就有类。我们使用类作为模板来创建对象。每个对象都有自己的状态。例如,您的程序中可以有许多不同的字符串。每个字符串都是一个拥有自己状态的对象,使用自己的实例变量。但是静态变量不属于对象,它们属于类。
“实例”表示一个对象的一次出现。我们使用构造函数实例化对象。
你的方法如
public double volume(){
被称为访问器或获取器,因为它们用于访问对象的状态。
让实例方法访问器访问静态变量令人困惑。静态成员与实例成员的作用域不同,在此处将它们组合在一起会令人困惑。很难说是什么意图,但你不应该使用静态变量来描述应该特定于实例的状态。
您的静态变量是公共的,并且与访问者同名。如果您调用没有括号的成员,您将直接调用变量。如果您使用括号,您将调用访问器。 .
如果您确实需要静态变量,则不要在构造函数中初始化它们。构造函数用于初始化类的实例,其中静态变量不属于一个实例,而是属于类。使用构造函数设置实例变量,而不是静态变量。