嵌套类


我的QQ号:2535279 
我的QQ群:58591592

www.javaedu.com.cn
 
 在java中,允许将一个类的定义放置到其他类中去.这就叫做内嵌类或者嵌套类.
 
 非静态的嵌套类可以分为3种:成员内嵌类,区域内嵌类,匿名内嵌类.
 
 嵌套类存在的主要目的是,对外部隐藏类的存在性.
 
 嵌套类,可以使得类属于它的外部类,并且能够得到对外部类所有成员,包括公有及私有的成员的控制
 
 来看一个例子:
 
 class Outer1{
     public class Inner{}
 }
 
 这个简单的小例子编译后,会产生两个文件:Outer1.class和Outer1$Inner.class.
 
 嵌套类可以用public,private,protected等修饰符来修饰.
 
 嵌套类需要以它的外部类的一个实例作为上下文进行实例化
 
 例如:
 
    class Outer2{
         public int i;
         public class Inner{
             public void f(){
                 i=10;
             }
         }
         
         public void test(){
             Inner inn = new Inner();
             inn.f();
             System.out.println(i);
         }
 }
 我们可以使用下面一个类来测试它:
 
 public class Test1{
     public static void main(String[] args){
         Outer2 o2 = new Outer2();
         o2.test();
     }
 }
 在这里我们用到了test函数,在test函数里面,我们可以使用Inner,并调用它的f()方法.
 
 
 同样的,我们也可以使用下面的一个类来测试它.
 public class Test2{
     public static void main(String[] args){
         Outer2 o2 = new Outer2();
         Outer2.Inner i1 = o2.new Inner();
         i1.f();
         System.out.println(i);
     
     }
 }
 在这个类里面,我们并没有试图调用test()方法来改变i的值,而是产生了一个Inner的实例,直接调用它的f()方法,看一下,这里是如何定义Inner的对象,它是由Outer2的一个对象来调用new Inner()来产生一个Inner的对象.这就是我刚才所说的需要以它的外部类的一个实例作为上下文进行实例化
 
最后补充一下,嵌套类可以定义在方法内部,定义在方法内部的嵌套类,并不能完全的访问外部方法中的变量.