java - 可以 `greetSomeone("world")` be replaced by `greetSomeone(name)`吗?此更改有任何副作用吗?

标签 java arguments inner-classes

我是 Java 新手,正在尝试学习内部类的概念。我从Java教程Oracle中看到了下面的代码。我的问题是,对于

String name = "world";
@Override
public void greet() {
    greetSomeone("world");
} 

能否将greetSomeone("world")替换为greetSomeone(name)。我问这个问题的原因是因为我注意到 public voidgreetSomeone( 内部的 greetSomeone("world") 是否确实被 greetSomeone(name) 替换) 方法时,传递的“name”参数将设置为其自身。我只是想知道这样的代码是否有副作用?

public class HelloWorldAnonymousClasses {

    interface HelloWorld {

        public void greet();

        public void greetSomeone(String someone);
    }

    public void sayHello() {
        class EnglishGreeting implements HelloWorld {

            String name = "world";

            @Override
            public void greet() {
                greetSomeone("world");
            }

            @Override
            public void greetSomeone(String someone) {
                name = someone;
                System.out.println("hello " + name);
            }
        }
        HelloWorld eg1 = new EnglishGreeting();
        eg1.greet();

    }

    public static void main(String[] args) {
        HelloWorldAnonymousClasses myApp = new HelloWorldAnonymousClasses();
        myApp.sayHello();
    }
}

最佳答案

首先为什么会有 @Override 注释?

当您想要更改父方法的行为时,您将使用 Override。你 parent 的方法没有行为,因为它是一个接口(interface)。作为进一步说明,我想它会告诉您重写方法的签名必须始终与父级的签名相匹配。

其次,设计有点狡猾。可以简化。

第三,是的,您可以引用该类中定义的 String 对象名称,并且只需调用“name”即可访问该对象的原语。为什么 System.out 时不会打印引用信息?因为 String 对象会为您处理该问题,确保 toString 会向您显示原语。当您执行 System.out.print(myObject); 时控制台将向您显示对象默认值或覆盖的 toString 方法。

因此,如果您创建一个对象并执行 System.out.print(myObject),您将看到引用。如果您覆盖 toString 返回“test”,您将看到 test。

关于java - 可以 `greetSomeone("world")` be replaced by `greetSomeone(name)`吗?此更改有任何副作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35665265/

相关文章:

java - 如何从数组中的所有元素中修剪空白?

c++ - 如何识别最后一个变量参数?

c - 将局部变量传递给线程。是否可以?

c++ - 设置开始迭代器时无效使用非静态数据成员

java - jni 在内部类中找不到方法,java.lang.NoSuchMethodError

java - 为什么 'Do you want to allow this app to make changes to device come up on Windows'

java - 创建 TableColumn 列表,java swing

java - 解决 namespace 之间类命名冲突的最佳方法

c - 如何使用 SWIG 创建带有可选参数的 TCL 函数?

java - 如何使用 Mockito/Powermockito 在内部类中对逻辑进行单元测试