浏览 1996 次
锁定老帖子 主题:JAVA SE学习笔记04
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-27
1、定义:那么顾名思意内部类就是定义在类中的类。例如: public class Person{ private int age; class Name{ } } 中的Name就是一个内部类。要注意的是内部类是编译时的语法。 2、内部类的分类 内部类分为:成员内部类、局部内部类、静态内部类和匿名内部类。 1)成员内部类:作为外部类的一个成员存在与外部类的属性方法并列。 如:Name就是一个成员内部类。 注意:(1)在内部类中可以直接访问外部类的么有属性,不会破坏封装性。 (2)内部类和外部类的实例允许命名冲突(相同的名字)。 (3)在内部内中访问实例变量要用this.属性名。在内部类中访问外部类的实例变量要用:外部类名.this.属性名。 (4)在另一个类中要创建该内部类要先创建一个外部类的实例,然后再创建该成员内部类的实例。 如:Person p = new Person(); Person.Name n = p.new Name(); (5)成员内部类不可以有static成员,因为static属性是在类加裁的时候被首先创建,而在这时内部类还没被创建。 2)局部内部类:在外部类的方法中定义的内部类。如: public class Person(){ private int age; public void run(){ class Run{ } } } 类Run就是局部内部类。 注意:(1)局部内部类的定义和局部变量的定义一样,不用加限定符,其作用域是为本代码块。 (2)它可以访问外部类的实例变量,也可以访问外部类的局部变量,但是外部类的局部变量必须为final的。 (3)可以配合interface来使用来做到强制性的弱耦合。 (4)在另外的一个类的中不可以创建局部内部类的实例,只能在局部内部类中来创建。 3)静态内部类:也是定义在类的内部用static来修饰。如: public class Person{ private int age; static class Name{ } } Name便是一个static内部类。 注意:(1)静态内部类只能访问外部类的static成员。 (2)在其它的类中要创建一个static内部类的对象不用外部类的对象。 Person.Name n = new Person.Name(); 4)匿名内部类:定义在类的内部并且没有类名。如: public class Person{ private int age; class{ //一个匿名内部类 } } 注意:1)匿名内部类只能创建一次实例。它从属于局部内部类。所局部内部类的所有限制都对它有效。 2)匿名内部类是唯一一种没有构造方法的类。 3)匿名内部类可以实现接口的回调。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |