黑马程序员技术交流社区
标题:
内部类定义在局部时的疑问(问题已解决,谢谢各位)
[打印本页]
作者:
戎石锁
时间:
2012-8-20 21:32
标题:
内部类定义在局部时的疑问(问题已解决,谢谢各位)
本帖最后由 戎石锁 于 2012-8-21 22:23 编辑
当内部类在一个成员位置上时,相当于一个成员,能别成员修饰符修饰,能访问外部类的成员。
为什么当内部类定义在局部时就有些不能了呢? 这里定义成局部是不是意思 说该内部类放在一个方法中? 这时不可以被成员修饰符修饰, 不可以访问其所在局部中的局部变量。
但是该内部类在这个局部中和那些局部变量不是平等的关系吗?怎么就不能访问了呢? 也作为局部中的一个成员,怎么就不能被修饰呢?
要是说 局部变量的数据是因为 随着 方法的存在而放在 栈 内存中,随方法消失而消失。 那调用该内部类不是肯定会加载这个方法的嘛。 那么这些局部变量不是也会存在。
作者:
贾成龙
时间:
2012-8-20 21:43
内部类的位置
A:成员位置
可以被private修饰
可以被static修饰。(它访问的外部类的成员必须是静态的)
class Outer
{
int num = 10;
class Inner
{
public void show()
{
sop(num);
}
}
public void method()
{
Inner i = new Inner();
i.show();
}
}
B:局部位置
可以直接访问外部类中的成员,也可以直接访问局部成员,但是
局部成员要用final修饰。
class Outer
{
int num = 10;
public void method()
{
int num2 = 20;
final int num3 = 30;
class Inner
{
public void show()
{
sop(num3);
}
}
Inner i = new Inner();
i.show();
}
}
注意:
局部内部类不能用private和static修饰。
匿名内部类(局部内部类的简写)
前提:继承一个类或者实现一个接口
格式:
new 父类名或者接口名()
{
重写父类方法或者实现接口中的方法。
也可以自定义其他方法。
};
举例:
interface Inter
{
public abstract void show();
}
class Outer
{
public void method()
{
new Inter()
{
public void show()
{
sop("show");
}
};
//如何调用方法呢?
new Inter()
{
public void show()
{
sop("show");
}
}.show();
//或者
Inter i = new Inter()
{
public void show()
{
sop("show");
}
};
i.show();
}
}
a.jpg
(45.77 KB, 下载次数: 38)
下载附件
2012-8-20 21:43 上传
作者:
黑马_许芸
时间:
2012-8-20 21:47
局部内部类可以定义在一个方法或者比方法更小的模块中。局部内部类就像一个局部变量一样,不能用public、protected、private 修饰。另外,局部内部类只能访问 final local variables (用final 修饰的局部变量)。局部内部类用得非常少,是四种内部类中用得最少的一种。建议楼主不要纠结这个问题。多看看匿名内部类啥的就好了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2