【问题标题】:Can we create two objects of same name in a java class我们可以在一个java类中创建两个同名的对象吗
【发布时间】:2020-06-23 07:17:31
【问题描述】:
public class Main {
    void sum(int a, int b) {
        System.out.println((a + b));
        Main ob = new Main();
        ob.difference(200, 100);
    }

    void difference(int a, int b) {
        System.out.println((a - b));
    }

    public static void main(String args[]) {
        Main ob = new Main();
        ob.sum(100, 25);

    }
}

当我在主方法中创建同名对象时,编译器会抛出错误,但是当我在不同方法中创建同名对象时,它会被编译。为什么会这样?

【问题讨论】:

  • 变量有一个范围。在方法中声明的变量是该方法的本地。相同的名称可以在不同的范围内使用,没有任何问题。出于同样的原因,您不能使用在另一个方法中声明的变量。
  • 用外行的话来说,范围基本上是每个{ }集合中的内容。无论您在其中的每一个中写入什么都是一个单独的变量,并且不会相互冲突。但是,当您在单个作用域或父子作用域中创建两个相同名称时,就会发生这种情况。
  • " 编译器抛出错误" - 这个错误很重要。将其包含在您的问题中!

标签: java class methods scope


【解决方案1】:

您可以重用引用以使变量指向一个新对象,如下所示。 在这种情况下,您不必再次声明类型。对于同一个变量,它总是相同的类型,这就是静态类型语言的工作原理。

public static void main(String args[]) {
    Main ob = new Main(1);
    ob.sum(100, 25);

    ob = new Main(2);
    ob.sum(100, 25);
}

【讨论】:

  • 我在回答“当我在 main 方法中创建同名对象时,编译器抛出错误...为什么?”
【解决方案2】:

是的,@ernest_k 是正确的.. 但我不知道为什么你需要在 add 方法中使用另一个对象,类中的方法可以在没有对象的情况下相互调用,因为 Main 是静态的虽然 addsubtract 不是,但您需要在 main 方法中添加一个对象。

main 中可以有一个对象,add 将被调用,而difference 则依次调用。

注意:您也可以将adddifference 设为static,这样您就不需要任何对象了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多