我的第一篇博客之 java内部类—方法内部类
定义
顾名思义,内部类就是一个类在另一个类的内部。
作用
我认为主要作用有两条:
1. 内部类可以很好的实现隐藏,拥有外部类所有元素的访问权限。
2、可以独立的继承多个具体的或抽象类的能力,使多重继承解决方案变得更完整。
分类
java内部类分为:匿名内部类、方法内部类、成员内部类、静态嵌套类。
四种内部类的共性
1. 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。
2. 内部类被当做外部类的一个成员,因此内部类可以用final、static、private等修饰符修饰,内部类可以随意的访问外部类的成员变量,无论外部类是否是private的。
3. 当内部类声明成static时,就不能随便访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量了。
1、匿名内部类
匿名内部类也就是没有名字的内部类,正因为没有名字,故此类只能用一次,通常用作简化代码。满足下面的一些条件,使用匿名内部类是比较合适的:
只用到类的一个实例类在定以后马上使用类非常小(SUN推荐是在4行代码以下)
2、方法内部类
方法内部类就是把类放在另外一个类的方法中。
package com.zzu.edu;
public class Person {
public void Study() {
final int i =
6;
final class Child {
public void speakForeign() {
System.out.println(i +
"门外语");
}
}
Child s =
new Child();
s.speakForeign();
};
public static void main(String[] args) {
Person p=
new Person();
p.Study();
}
}
运行结果:6门外语。 上面的例子表明我们只知道Person类实现了学习的功能,具体怎样实现的,我们并不知道的。所以可以使用方法中的内部类隐藏我们的信息。 注意
方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。方法内部类对象不能使用内部类所在方法的非final局部变量。因为方法的局部变量位于栈上,只存在于该方法的生命周期内。当一个方法结束后,其栈结构被删除,局部变量变为历史。但是该方法结束后,在方法内创建的内部类对象可能仍然存在于栈中!