gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:53:43 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com