你这样看不习惯的话 换个方式 public static Base getBase(int i)//注意,这个i不是final的 { class Son extends Base { public Son(int i) { super(i); } xxx//其他的就不加了 } return new Son(i);//这里用到的i 不是在内部类中用的 }
new Base(i) 这里只是普通的构造函数调用而已,根内部类没有关系,不管在哪儿都是这样调用的。 并且 public static Base getBase 方法的签名为静态,所以在进行方法调用时,不需要实例化对象。
public static Base getBase(int i)//注意,这个i不是final的
{
class Son extends Base
{
public Son(int i)
{
super(i);
}
xxx//其他的就不加了
}
return new Son(i);//这里用到的i 不是在内部类中用的
}
这里只是普通的构造函数调用而已,根内部类没有关系,不管在哪儿都是这样调用的。
并且
public static Base getBase
方法的签名为静态,所以在进行方法调用时,不需要实例化对象。
匿名内部类,其实是局部内部类的一种特殊形式,匿名内部类是说这个类的只需要一个对象就可以,也说就是说匿名内部类不能在定义它的类的外部使用,所以,上面举的例子再加上一个private就应该跟匿名内部类一样了.如果不加的话,这个内部类实际上是protected,在继承类中还是可以使用的.
这里带名字的内部类在方法体里面是局部的,你在外面没办法访问,继承也没办法继承
你说的对,这个局部内部类在定义它的方法外部是不能访问的,也不能用private,protected public 修饰,而只能用final和abstract修饰.
还有 不加任何修改表示是包可见.我搞错了,呵呵.