【问题标题】:Parameter not passed through the constructor参数未通过构造函数传递
【发布时间】:2021-07-16 06:20:10
【问题描述】:
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

我通过构造函数传递的参数似乎没有被立方体类正确处理。

我在这里做错了什么?

【问题讨论】:

  • 不是 java 专家,但我认为您正在打印成员变量 volume 而不是调用函数 volume()。 (java允许变量和方法同名,根据你是否使用()来选择)

标签: java class constructor parameter-passing


【解决方案1】:

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

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

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

你喜欢的方法

 public double volume(){

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2016-03-20
    相关资源
    最近更新 更多