现在的位置: 首页 > 综合 > 正文

内部类(Inner Class)

2012年11月27日 ⁄ 综合 ⁄ 共 1752字 ⁄ 字号 评论关闭

共有四种:

1.      
静态内部类

编译生成StaticInnerClass$InnerClass.class文件

 

示例1

public class StaticInnerClassTest

{

    public static void main(String[] args)

    {

       //声明静态内部类的方式。

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

 

       inner.output();

    }

}

 

class StaticInnerClass

{

    private static int a = 4;

 

    //静态内部类只能访问外部类的静态成员变量和静态方法。

    public static class InnerClass

    {

       public void output()

       {

           System.out.println(a);

       }

    }

}

 

示例2

public class StaticInnerClassTest2

{

    public static void main(String[] args)

    {

       //静态内部类的静态方法,可以不用实例化静态类而直接调用。

       Animal.Cat.run();

       Animal.Dog.run();

    }

}

 

class Animal

{

    static class Cat

    {

       public static void run()

       {

           System.out.println("Cat is running");

       }

    }

   

    static class Dog

    {

       public static void run()

       {

           System.out.println("Dod is running");

       }

    }

}

 

 

2.      
成员内部类

可以访问外部类的静态与非静态的方法和成员变量。

public class MemberInnerClassTest

{

    public static void main(String[] args)

    {

       //成员内部类的定义方式

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

      

       inner.output();

    }

}

 

class MemberInnerClass

{

    private int a = 4;

   

    public class InnerClass

    {

       private int a = 5;

      

       public void output()

       {

           //在成员内部类调用外部类的成员,必须使用下面的方式

           System.out.println(MemberInnerClass.this.a);

       }

    }

}

 

 

 

3.局部内部类

定义在外部类的方法里面

public class LocalInnerClassTest

{

    public static void main(String[] args)

    {

       LocalInnerClass local = new
LocalInnerClass();

       local.doSomething();

    }

}

 

class LocalInnerClass

{

    public void doSomething()

    {

       // 如果在外部类的方法里面定义一个变量,必须用fianl修饰,否则不能被局部内部类访问。

       final int a = 8;

 

       //在方法里声明的类就是局部内部类

       class InnerClass

       {

           public void test()

           {

              System.out.println(a);

           }

       }

 

       //

抱歉!评论已关闭.