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)
在此先感谢您的帮助!
如错误消息所述,您正在尝试添加int(integer)和My_class(new_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。