标题: 局部内部类的一个小问题 [打印本页] 作者: lzhuas 时间: 2014-4-14 12:40 标题: 局部内部类的一个小问题 public class InnerTest {
public static void main(String[] args){
new Outer().function();
}
}
abstract class AbsDemo{
abstract void show();
}
class Outer{
int x = 3;
public void function(){
AbsDemo d = new AbsDemo(){
int num = 9;//不是局部内部类只能访问被final修饰的局部变量吗?
void show(){
System.out.println("num=="+num);
}
};
d.show();
}
}
你以上这句话存在很大嫌疑,你定义的int num = 9;是匿名内部类中的成员变量,而不是局部变量!
毕老师所说的局部变量,应定义在function();方法下边,才是局部变量。代码如下:
public class InnerTest {
public static void main(String[] args){
new Outer().function();
}
}
abstract class AbsDemo{
abstract void show();
}
class Outer{
int x = 3;
public void function()
{
final int num = 8;//这这个num才是必须用final修饰的局部变量
AbsDemo d = new AbsDemo()
{
//int num = 9;这个num是匿名内部类的成员变量
void show()
{
System.out.println("num=="+num);
}
};
d.show();
}
}
复制代码
作者: 你为谁归来 时间: 2014-4-14 13:12
内部类定义在局部的时候,可以直接访问外部类的成员,但是不能访问它所在的局部中的不加final的变量,而你的num是定义在内部类中的不是定义在外部类的局部变量上面的,所以不加final也可以访问的。作者: ilvsoft 时间: 2014-4-14 13:19
class Outer{
int x = 3;
public void function(){
AbsDemo d = new AbsDemo(){
int num = 9;//不是局部内部类只能访问被final修饰的局部变量吗?