任何人都可以解释以下代码的工作原理......?
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/