java中的内部类
Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱,一个内部类定义在函数里,甚至可以作为表达式的一部分
使用内部类的优点:
1)实现多重继承;
2)内部类可以很好的实现隐藏:一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
3)减少了类文件编译后的产生的字节码文件的大小
java中的内部类主要包括四个方面
(1)静态内部类 Static Inner Class
最简单的内部类,定义时加上static关键字,不能和外部类有相关的名字。被编译成一个完全独立的Class文件,名称为OuterClass$InnerClass.class的形式
只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法
(2)成员内部类
成员内部类也是定义在另一个类中,但是定义时不用static修饰。
成员内部类就像一个实例变量,它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。
(3)局部内部类Local Inner Class
局部内部类定义在方法中,比方法的范围还小。是内部类中最少用到的一种类型。
像局部变量一样,不能被public, protected, private和static修饰。
只能访问方法中定义的final类型的局部变量。
局部内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成局部内部类的实例并且调用其方法
(4)匿名内部类Anonymous Inner Class
匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。匿名内部类隐式地继承了一个父类或者实现了一个接口。匿名内部类使用得比较多,通常是作为一个方法参数。
如果一个内部类在整个操作中只使用一次的话,就可以定义为匿名内部类。匿名内部类也就是没有名字的内部类,这是java为了方便我们编写程序而设计的一个机制,因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适。
/*
* 匿名内部类
*/
public interface Person
{
public void run();
}
/*
* 测试类
*/
public class Test
{
public static void main(String[] args)
{
Person p=new Person()
{
public void run()
{
System.out.println("匿名内部类实现的");
}
};
p.run();
}
}