0

不完全确定如何表达这一点,抱歉标题模棱两可。无论如何,这基本上是我的建议。

基本上,我知道如何使用构造函数和函数等将值传递给类,例如,

class bob {
    int value;
    public bob(int x) {
        value = x;
    }
}

bob test = bob(5);

但是你如何处理运营商之类的事情呢?比如,如果一个人将这些类加在一起:

bob test1 = bob(5), test2 = bob(3), test3 = test1 + test2;

如果一个人试图将两个实例化的对象加在一起,我怎么能让它真正做点什么?

或者,如果我说类似的话,

bob test = 5;

我怎么能用你初始化它的值做一些事情呢?

4

3 回答 3

2

你不能在Java中做任何事情。Java 的运算符仅适用于原始类型(String 作为特殊例外),常规对象只能使用兼容对象或null.

相反,您应该定义适当的方法和构造函数:

public bob add(bob other) { ... }

然后使用

bob test1 = new bob(5);
bob test2 = new bob(3);
bob test3 = test1.add(test2);

既然做不到bob test = 5;,那就做吧bob test = new bob(5);

于 2012-10-07T02:57:12.543 回答
0

Java 不是 C++。你不能在没有new关键字的情况下调用构造函数(除非你使用反射,但这完全是另一个话题)。您也不能覆盖喜欢+使用自定义对象类型的运算符。

相反,如果将对象类型的一个实例添加到另一个实例在语义上是合适的,则可以通过定义一个add()方法来实现,例如:

class Bob {
    int value;
    public Bob(int x) {
        value = x;
    }

    public Bob add(Bob other) {
        return new Bob(this.value + (other == null ? 0 : other.value));
    }
}

进而:

Bob test1 = new Bob(5);
Bob test2 = new Bob(3);
Bob test3 = test1.add(test2);
于 2012-10-07T02:59:51.137 回答
0

你的类声明是正确的。(在一个完全不相关的主题中,按照惯例,Java 类应该以大写字母开头。即,您的类应该命名为 Bob。但这与问题无关......)

创建对象并将参数传递给构造函数的正确语法是:

Bob test = new Bob(5);

至于加法,您不能直接与运营商合作。有些语言允许您指定运算符对对象执行的操作,但 Java 不是其中之一。(您可以在 Google 上搜索运算符重载以获取更多信息。)

如果你想要添加类型的东西,你实际上必须为它定义一个函数。在你的情况下,你可以做两件事:

您可以定义一个实例函数:

class Bob {
// The other stuff you listed, like the constructor and the private field
    public Bob add(Bob other) {
        return new Bob(value + (other == null ? 0 : other.value));
    }
}

或者,您可以定义一个静态函数:

class Bob {
// The other stuff you listed, like the constructor and the private field
    public static Bob add(Bob one, Bob other) {
        return new Bob((one == null ? 0 : one.value) + (other == null ? 0 : other.value));
    }
}

第一个,你打电话给

test3 = test1.add(test2);

第二个,你打电话给

test3 = Bob.add(test1, test2);
于 2012-10-07T03:05:29.043 回答