java中的方法重载,如何读取variable.method中的变量进行方法声明? java

Method overloading in java, how to read variable in variable.method for method declaration? java

我想创建一个名为 plus 的方法,将变量 i1 添加到 i2。 但是我不明白我是如何根据下面给定的代码(代码片段 2)调用我的方法加上 variabel i1 的。 我最初的想法是这样做(但不能因为说明):

public class Int{
        public static voind main(String[] args){
        Int i1 = new Int(5); 
        Int i2 = new Int(2);  
        Int sum = plus(i1, i2);
        }
        public static int plus(int i1, int i2) {
         int sum = i1 + i2;
        return sum;
        }
        System.out.prinln("Sum of i1 and i2 is " + sum);
}

我尝试以与上面代码相​​同的方式创建函数 plus(int i1, int i2) 但随后出现以下错误: Int 类型中的方法 plus(int, int) 不适用于这 参数(整数)

然后我尝试了这个:

public class Int {
        public Int(int i) {
        // TODO Auto-generated constructor stub
    }
        public static void main(String[] args) {
        Int i1 = new Int(5); //cannot be changed to due assignment instructions
        Int i2 = new Int(2);  //cannot be changed to due assignment instructions
        Int sum = i1.plus(i2);  //cannot be changed to due assignment instructions
        }
        public static int plus(int i2) {
         int sum = i1 + i2;
        return sum;
        }

}

但是在方法plus中得到错误:i1无法解析为变量

期望的输出:i1 和 i2 的总和是 Int(7)

我假设您的 Int class 有一些成员 i 持有 Int 的各个实例的值。该成员可以在 Int 的任何 class 方法中作为 this.i 访问。

此外,在您的 main 方法中,您使用 i2 作为参数调用 plusi2Int 的实例,但您的方法签名要求 int (原语)。

最后但并非最不重要的是,您想要访问 Int 的实例信息,也就是说您可能不想创建方法 static,而是想要一个实例方法。

考虑到以上所有内容,您的方法可能如下所示:

public int plus(Int i2) {
  int sum = this.i + i2.i;
  return sum;
}

i1 和 i2 是 class Int 的对象,所以你不能这样求和。我建议你在 Int class 中添加一个属性 "value",在构造函数中分配值,然后在你的 plus 方法中求和这个值

要实现 Int sum = i1.plus(i2) 的语法,您需要一个方法:

  • 是一个实例(即non-static)方法
  • 接受一个Int作为参数
  • returns一个Int

具体来说,plus 应该计算 2 Int 和 returns 的总和,一个新的 Int.

此外,您必须覆盖 InttoString 方法,以便它 returns 打印时包装 int 的字符串表示形式。

说到包装的 int,您的 Int class 似乎没有存储传递的 int 的基础 int 字段进入构造函数。您目前只是忽略了传递给构造函数的任何内容,这似乎不是一个好主意。

根据以上内容,Int 应如下所示:

class Int {
    private int wrapped;

    public Int(int wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public String toString() {
        return Integer.toString(wrapped);
    }

    public Int plus(Int other) {
        int sum = this.wrapped + other.wrapped;
        return new Int(sum);
    }
}