内部类就是在class再定义一个class。什么时候用呢? 分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。,这时就是还有的事物定义成内部类来描述。

 

内部类访问特点

  Ⅰ.内部类可以直接访问外部类的成员

  Ⅱ.外部类要访问内部类,必须建立内部类的对象

 1 //定义一个内部类的实例
 2 public class InnerClassDome {
 3     public static void main(String[] args)
 4     {
 5         new Outer().method();
 6     }
 7 }
 8 
 9 class Outer
10 {
11     private int num = 3;
12     //内部类
13     class Inner
14     {
15         public void show()
16         {
17             System.out.println("run show...");
18         }
19     }
20 
21     //定义一个访问内部类的方法
22     public void method()
23     {
24         Inner inner = new Inner();
25         inner.show();
26     }
27 }

 

 1 //直接访问内部类
 2 public class InnerClassDome {
 3     public static void main(String[] args)
 4     {
 5         new Outer().method();
 6     }
 7 }
 8 
 9 class Outer
10 {
11     private int num = 3;
12     //内部类
13     class Inner
14     {
15         public void show()
16         {
17             System.out.println("run show...");
18         }
19     }
20 
21     //定义一个访问内部类的方法
22     public void method()
23     {
24         //直接访问内部类
25         Outer.Inner in = new Outer.Inner();
26         in.show();
27     }
28 }

 

// 如果内部类是静态的,相对于一个外部类
//想初始化内部类必须是静态的
public class InnerClassDome {
    public static void main(String[] args)
    {
        //如果内部类是静态的,相对于一个外部类
        //注意:如果调用静态内部类的方法,方法里引用了有外部类的变量,该变量必须为静态,不然会报错。
        Outer.Inner in = new Outer.Inner();
        in.show();
        //如果内部类是静态的,成员也是静态的,可以直接这样用
        Outer.Inner.function();
    }
}

class Outer
{
    private int num = 3;

    //静态内部类
    static class Inner
    {
        void show()
        {
            System.out.println("run show...");
        }
        static void function()//如果内部中定义了静态成员,该内部类也是必须是静态的
        {
            System.out.println("run function...");
        }
    }

    public void method()
    {
        Inner inner = new Inner();
        inner.show();
    }
}

 

为什么内部类能直接访问外部类的成员呢?那是内部类持有了外部类的引用。“外部类名.this”

 1 public class InnerClassDome {
 2     public static void main(String[] args)
 3     {
 4         new Outer().method();
 5     }
 6 }
 7 
 8 class Outer
 9 {
10     int num = 5;
11     class Inner
12     {
13         int num = 6;
14         void show()
15         {
16             int num = 7;
17             System.out.println(num);//输出7
18             System.out.println(this.num);//输出6
19             System.out.println(Outer.this.num);//输出5
20         }
21     }
22 
23     public void method()
24     {
25         new Inner().show();
26     }
27 }

 

//内部类可以存放在局部位置上
public class InnerClassDome {
    public static void main(String[] args)
    {
        new Outer().method();
    }
}

class Outer
{
    private int num = 3;
    public void method()
    {
        class Inner
        {
            int num = 4;
            void show()
            {
                int num = 5;
                System.out.println("show ... " + num);//输出5
                System.out.println("show ... " + this.num);//输出4
                System.out.println("show ... " + Outer.this.num);//输出3
            }
        }
        Inner inner = new Inner();
        inner.show();
    }
}

 

posted on 2020-11-13 15:00  白客C  阅读(131)  评论(0编辑  收藏  举报