java 内部类总结

将相关的类组织在一起,从而降低了命名空间的混乱。

一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分。

Java中的内部类共分为四种

静态内部类static inner class (also called nested class)

成员内部类member inner class

局部内部类local inner class

匿名内部类anonymous inner class

静态内部类Static Inner Class

最简单的内部类形式。

类定义时加上static关键字。

不能和外部类有相同的名字。

被编译成一个完全独立的.class文件,名称为OuterClass$InnerClass.class的形式。

只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。

生成静态内部类对象的方式为:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

静态内部类使用代码:

静态内部类使用测试

成员内部类Member Inner Class

成员内部类也是定义在另一个类中,但是定义时不用static修饰。

成员内部类和静态内部类可以类比为非静态的成员变量和静态的成员变量。

成员内部类就像一个实例变量。

它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以

在外部类里面创建成员内部类的实例:

  this.new Innerclass();

在外部类之外创建内部类的实例:

  (new Outerclass()).new Innerclass();

在内部类里访问外部类的成员:

  Outerclass.this.member

详情见代码例子:

   成员内部类使用测试

局部内部类Local Inner Class

局部内部类定义在方法中,比方法的范围还小。是内部类中最少用到的一种类型。

像局部变量一样,不能被public, protected, private和static修饰。

只能访问方法中定义的final类型的局部变量。

局部内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成局部内部类的实例并且调用其方法。

   成员内部类使用测试

匿名内部类Anonymous Inner Class

匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。

  匿名内部类隐式地继承了一个父类或者实现了一个接口

匿名内部类使用得比较多,通常是作为一个方法参数。

     匿名内部类使用测试

生成的.class文件中,匿名类会生成OuterClass$1.class文件,数字根据是第几个匿名类而类推。

Swing中使用内部类的例子如下:

Swing中使用匿名内部类

参考资料

张龙老师Java SE系列视频教程。

博客早期一篇内部类文章:

http://www.cnblogs.com/mengdd/archive/2012/08/22/2650800.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注