Sid*_*dhi 6 java abstract-class interface anonymous-class
任何人都可以解释以下代码的工作吗?
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";}});
}
}
Run Code Online (Sandbox Code Playgroud)
输出是......
myInterfacetoString
primitivedemo.Main$2@9304b1
Run Code Online (Sandbox Code Playgroud)
所有答案都说println()语句中的myInterface是匿名类.但是因为我已经将它声明为接口,为什么它允许我创建同名的匿名类....?
再次...如果这些是匿名类,那么class main应该允许我给这些匿名类赋予任何名称..但是如果尝试这样做..我得到编译错误
vod*_*ang 14
打印出一个对象时,它将调用toString()方法.在第一个语句中,您创建了新对象,并且还覆盖了名为toString的方法.因此,在打印对象时调用此toString()方法.
在第二个语句中,您还创建了一个对象,但是您没有覆盖toString()方法,因此它将使用Object类的toString()方法.
对于新问题,此链接对您的理解有一个很好的解释: 匿名类
以下是解释的副本:
new className(optional argument list){classBody}
Run Code Online (Sandbox Code Playgroud)
这表情从一位不愿透露姓名和以前未定义类,实例化一个新的对象自动扩展名为类名的类,并且不能明确地实现任何接口.新类的主体由classBody给出.
执行此表达式的结果是定义了一个扩展className 的新类,实例化了新类的新对象,并且该表达式被对新对象的引用所取代.
new interfaceName(){classBody}
Run Code Online (Sandbox Code Playgroud)
此表达式实例化一个新的对象从一个未命名和先前未定义类,它可以自动实现名为接口名的接口,并自动扩展的类名为对象.该类可以显式实现一个,只有一个接口,并且不能扩展除Object之外的任何类.同样,新类的主体由classBody给出.
你现在明白了吗?
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |