gpt4 book ai didi

java - 任何人都可以解释以下代码的工作......?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:47 24 4
gpt4 key购买 nike

任何人都可以解释以下代码的工作原理......?

interface myInterface{}

public class Main {

public static void main(String[] args) {

System.out.println(new myInterface(){public String toString(){return "myInterfacetoString";}});

System.out.println(new myInterface(){public String myFunction(){return "myInterfacemyFunction";}});
}
}

输出是...

myInterfacetoString
primitivedemo.Main$2@9304b1

所有答案都说 println() 语句中的 myInterface 是匿名类。但是因为我已经将它声明为一个接口(interface),为什么它允许我创建同名的匿名类......?

再次...如果这些是匿名类,那么 main 类应该允许我为这些匿名类提供任何名称..但是如果尝试这样做..我会遇到编译错误

最佳答案

当您打印出一个对象时,它会调用 toString() 方法。在第一条语句中,您创建了一个新对象并覆盖了名为 toString 的方法。因此,打印对象时会调用此 toString() 方法。

在第二条语句中,您还创建了一个对象,但没有覆盖 toString() 方法,因此它将使用 Object 类的 toString() 方法。

对于新问题,这个链接对你的理解有很好的解释: Anonymous Classes

这是解释的副本:

new className(optional argument list){classBody}

此表达式从一个未命名且之前未定义的类中实例化一个新对象,该类自动扩展名为 className 的类,并且不能显式实现任何接口(interface)。新类的主体由 classBody 给出。

执行该表达式的结果是定义了一个扩展className的新类,实例化了一个新类的新对象,并且表达式替换为对新对象的引用

new interfaceName(){classBody}

此表达式从一个未命名且以前未定义的类实例化一个新对象,它自动实现名为interfaceName的接口(interface),并自动扩展名为 Object 的类。该类可以显式实现一个且仅一个接口(interface),并且不能扩展 Object 以外的任何类。新类的主体再次由 classBody 给出。

你现在清楚了吗?

关于java - 任何人都可以解释以下代码的工作......?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978849/

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