class Parce
{
public Contents contents()
{
return new Contents()
{
private int i = 11;
public int value()
{
return i;
}
};
}
public static void main(String[] args)
{
Parce p = new Parce();
Contents c = p.contents();
LZ先明白匿名内部类的前提:内部类要继承或实现一个外部类或者接口。
也就是说要建立一个带内容的外部类或者接口的子类匿名对象,而接口中的成员的修饰符是固定的:
1:修饰成员变量时修饰符为:public static final
2:修饰成员方法时修饰符为:public abstract
所以受接口中的成员都是用public修饰的,就算没有java虚拟机会默认加上。既然内部类要继承或实现一个外部类或接口,那子类的方法权限一定要大于等于父类的权限。
所以接口inteface Contents中的int value()方法实际上是 public abstract int value(),那么你子类中的方法当然要用public修饰了。