【发布时间】:2016-07-30 23:26:13
【问题描述】:
当在匿名内部类定义中重新定义相同的数据时,为什么从接口构造的匿名内部类会从接口返回数据。请看一下这段代码,它似乎访问了接口中的字段和匿名类,同名:
interface Item{
int data=0;
String text="";
}
public class Problem2{
public static void main(String[] args){
Item item=new Item(){ public int data=2; public String text="an item";
public boolean equals(Object object){
if(object instanceof Item){
Item test=(Item)object; //tests on next line
System.out.println(test); System.out.println(String.format("data: %d; text: \"%s\"", test.data, test.text)); //returns data and text fields of interface, after returning fields defined in anonymous class on toString call
System.out.println(test); //toString returns same
return data==test.data && text.equals(test.text); } return false;}
public String toString(){return String.format("{data: %d; text: \"%s\"}", data, text);} };
System.out.println(((Object)item).equals(item)); //returns false
}
}
请解释它是如何在匿名内部类的字段不变的情况下返回接口的字段的。 输出:
{data: 2; text: "an item"}
data: 0; text: ""
{data: 2; text: "an item"}
false
【问题讨论】:
-
好的,我明白了,也就是说,传入的 Item 接口参数预计是不可变的......因此 item.data 和 item.text 被视为最终的,在接口中隐式指定。
-
我认为您正在寻找的是抽象类,而不是接口。
标签: java interface anonymous-inner-class