天天看點

Java中的成員内部類、靜态内部類和方法内部類

目錄

    • 成員内部類
    • 靜态内部類
    • 方法内部類
    • 完整程式

成員内部類

  • 成員内部類建立對象必須使用外部類對象來建立内部類對象,而不能直接new内部類構造方法的方式建立;
//普通成員内部類建立對象,需通過外部類對象進行建立
demo01 de1 = new demo01();
DemoChild2 dc2 = de1.new DemoChild2();
           
  • 外部類對象不能直接使用内部類的屬性和方法,可先建立内部類對象并通過内部類對象通路;
  • 當外部類與内部類有相同的變量或者方法,内部類對象預設通路自己的變量和方法,若要通路外部類的對象和方法,需以外部類名.this.變量或方法的方式通路。
//普通成員類調用外部類的成員變量和調用内部類的成員變量
System.out.println(demo01.this.age);
System.out.println(age);
           

靜态内部類

靜态内部類是 static 修飾的内部類,這種内部類的特點是:

1、 靜态内部類不能直接通路外部類的非靜态成員,但可以通過 new 外部類().成員 的方式通路

//靜态内部類調用外部類和内部類的普通成員變量
System.out.println(new demo01().age);
System.out.println(age);
           

2、 如果外部類的靜态成員與内部類的成員名稱相同,可通過“類名.靜态成員”通路外部類的靜态成員;如果外部類的靜态成員與内部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜态成員

//靜态内部類調用外部類和内部類的靜态成員變量
System.out.println(demo01.name);
System.out.println(name);
           

3、 建立靜态内部類的對象時,不需要外部類的對象,可以直接建立 内部類 對象名= new 内部類();

DemoChild dc1 = new DemoChild();//靜态内部類建立對象
           

方法内部類

方法内部類就是内部類定義在外部類的方法中,方法内部類隻在該方法的内部可見,即隻在該方法内可以使用。

//方法内部類
private void Show()
{
    String name = "aaa";
    int age = 25;
    class DemoChild3{
       // private String name = "aaa";
        //private int age = 25;
        private void print()
        {
            System.out.println(name);
            System.out.println(age);
        }
    }
    DemoChild3 dc3 = new DemoChild3();
    dc3.print();
}
           

完整程式

package com.practice;

public class demo01 {
    private static String name="Tom";
    private int age = 21;

    //靜态内部類
    public static class DemoChild{
        static String name="Lucy";
        int age = 19;
        void Print()
        {
            //靜态内部類調用外部類和内部類的靜态成員變量
            System.out.println(demo01.name);
            System.out.println(name);
            //靜态内部類調用外部類和内部類的普通成員變量
            System.out.println(new demo01().age);
            System.out.println(age);
        }
    }

    //成員内部類
    public class DemoChild2{
        int age = 20;
        void Print()
        {
            //普通成員類調用外部類的成員變量和調用内部類的成員變量
            System.out.println(demo01.this.age);
            System.out.println(age);
        }
    }

    //方法内部類
    private void Show()
    {
        String name = "Anmi";
        int age = 25;
        class DemoChild3{
           // private String name = "aaa";
            //private int age = 25;
            private void print()
            {
                System.out.println(name);
                System.out.println(age);
            }
        }
        DemoChild3 dc3 = new DemoChild3();
        dc3.print();
    }

    public static void main(String []args)
    {
        DemoChild dc1 = new DemoChild();//靜态内部類建立對象

        //普通成員内部類建立對象,需通過外部類對象進行建立
        demo01 de1 = new demo01();
        DemoChild2 dc2 = de1.new DemoChild2();

        dc1.Print();
        dc2.Print();
        de1.Show();
    }
}

           

運作結果:

Java中的成員内部類、靜态内部類和方法内部類