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

Jay*_*ron 1 java methods inheritance class 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);
Run Code Online (Sandbox Code Playgroud)

应打印:

8
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码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;
    }
Run Code Online (Sandbox Code Playgroud)

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

The operator + is undefined for the argument type(s) int, My_class
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

T.J*_*der 6

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

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

return integer + new_integer.integer;
// -------------------------^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

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

以上返回int,因此该方法将是:

public int add(My_class new_integer) {
// ----^^^
    return integer + new_integer.integer;
}
Run Code Online (Sandbox Code Playgroud)

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

public My_class add(My_class new_integer) {
    return new My_class(integer + new_integer.integer);
    // ----^^^^^^^^^^^^^-----------------------------^
}
Run Code Online (Sandbox Code Playgroud)

旁注:我也强烈建议this.在访问类的实例成员时始终使用,因此:

return this.integer + new_integer.integer;
// ----^^^^^
Run Code Online (Sandbox Code Playgroud)

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


旁注2:尽管您可以在自己的代码中做任何您想做的事情,但是压倒性的约定(也是正式的约定,PDF)是使用混合大小写,每个单词以大写字母开头,MyClass而不是My_class