Java +操作员行为未按预期继承

时间:2019-07-06 13:21:16

标签: java class inheritance methods operator-keyword

我正在学习用Java创建类,但是遇到了奇怪的行为。

我想创建一个名为My_class的类,该类具有一个名为add的方法。该方法应采用My_class的成员并将其添加到括号中指定的My_class的另一个成员中。

例如,运行此命令:

My_class first = new My_class(2);
My_class second = new My_class(6);
My_class answer = first.add(second);
System.out.println(answer);

应打印:

8

这是我用于My_class的代码,但是我一直遇到有关My_class+运算符如何处理的问题。我以为,由于My_class是从int继承而来的,所以应该没有问题,但是显然我在这里缺少一些基本知识。

public class My_class {
    /* Data members*/
    private int integer;

    /* Constructors */
    public My_class(int i) {integer = i;}

    /* Methods */
    public My_class add(My_class new_integer) {
        return integer + new_integer;
    }

我得到的不是预期的结果:

The operator + is undefined for the argument type(s) int, My_class

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

如错误消息所述,您正在尝试添加intinteger)和My_classnew_integer)。你不能那样做。

如果要使用integer中的new_integer字段,则必须显式访问它:

return integer + new_integer.integer;
// -------------------------^^^^^^^^

(最好将new_integer参数重命名为一个并不暗示它是int的东西,因为它不是My_class的实例。)

上面的返回int,因此方法将是:

public int add(My_class new_integer) {
// ----^^^
    return integer + new_integer.integer;
}

如果要保留My_class的{​​{1}}返回值,则需要创建一个add实例:

My_class

旁注:我也强烈建议在访问类的实例成员时始终使用public My_class add(My_class new_integer) { return new My_class(integer + new_integer.integer); // ----^^^^^^^^^^^^^-----------------------------^ } ,因此:

this.

这是一个样式问题(Java编译器会在必要时推断return this.integer + new_integer.integer; // ----^^^^^ ),但是恕我直言,它可以提高清晰度,因为this.本身可以是局部变量,即类名(尽管希望如此)不是),静态成员,...


旁注2:尽管您可以在自己的代码中执行任意操作,但压倒性的约定(也是正式的约定,PDF)是在每个单词的开头使用大写字母的混合大小写,因此{{ 1}},而不是integer