先来看一段简单的代码: - //情况一:创建两个常规类A和B
- class A{
- int a = 5;
- void fun(){
- C c = new C();
- c.method();
- System.out.println("A:" + a);
- }
- //情况二:将C类放入A类中
- class C{
- void method(){
- System.out.println("C访问A:" + a);//可直接访问
- }
- }
- }
- class B{
- void fu(){
- int a = 6;
- A me = new A();
- System.out.println("访问A中a:" + me.a);//必须建立对象后才能访问
- }
- }
- class Demo
- {
- public static void main(String[] args)
- {
- A x = new A();
- B y = new B();
- x.fun();
- y.fu();
- }
- }
复制代码从代码中就可以看出,内部类的好处。 内部类:将一个类定义在另一个类之中。 一、访问规则(即使用内部类的好处): 1、内部类方法可以访问该类所在的类中作用域的成员,包括私有成员变量。 2、内部类可以对同一个包中的其他类隐藏起来,从而不被访问 3、使用匿名内部类是比较便捷简单的,这种情况较多的用于AWT设计中。 注:为何内部类可直接访问外部类: 由于成员可被对象访问,内部类中持有了一个外部类的引用,,因此就可以直接用:外部类名.this.成员 二、访问格式: 1当内部类定义在外部类的成员位置上,而且非私有,可在外部其他类中直接建立内部类对象 格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象 2、当内部类在成员变量的位置上,可被成员修饰符修饰 ·private:将内部类在外部类中进行封装 ·static:内部类具备了static的特性,当内部类被static修饰(下面说到的静态内部类),只可访问外部类中的static的成员,访问则受限。 注:(Outer为外部类名,Inner为内部类名,function为非静态成员) 在其他类中,如何访问静态内部类中非静态成员:new Outer.Inner.function();(建立对象访问) 在其他类中,如何访问静态内部类中的静态成员:Outer.Inner.function();(可直接访问) 注意: 1、当内部类中定义了静态成员,该内部类必须为静态的 2、当外部类中静态方法访问内部类时,内部类必须为静态的 3、内部类一般定义为private的,而很少定义为public的。 三、内部类定义原则:------->多在程序设计中使用 1、当描述事物时,事物的内部还有事物,则该事物使用内部类来描述,因为内部事物要使用外部事物内容 举例来说:楼房内部还有家庭住户,家庭住户中还有房间,这就可以用内部类描述。(总不能访问一个住户,就建立一个楼房对象吧,那就可真是有钱人的风范了。) 2、何时定义内部类: 当一个类需要直接访问另一个类中的成员时,则当这个类放入另一个类中,并将内部类封装。 3、内部类生成文件: 我们在编译一个源文件是,如果代码中有内部类,你会发现,生成的class文件中含有例如这样的文件:A$C.class。这是为什么呢?因为内部类是一种编译现象,与虚拟机无关。编译器将会把内部类翻译成用$(美元符号)分隔外部类名和内部类名的常规类文件,而虚拟机对此却一无所知。
|