我正在学习用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
在此先感谢您的帮助!
答案 0 :(得分:6)
如错误消息所述,您正在尝试添加int
(integer
)和My_class
(new_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
。