java內部類

第一種

          

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);

       }

    }

}


第二種

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");

       }

    }

}

 

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);

       }

    }

}



第三種


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);

           }

       }

 

       //只能在方法裏實例化,並調用局部內部類的方法

       new InnerClass().test();

    }

}


第四種


public class AnonymousInnerClassTest

{

    @SuppressWarnings("deprecation")

    public String getDate(Date date)

    {

       return date.toLocaleString();

    }

 

    public static void main(String[] args)

    {

       AnonymousInnerClassTest test = new AnonymousInnerClassTest();

          

       //在這裏匿名內部類會隱式地繼承Date類,然後就可以重寫toLocaleString方法,從面改變它的行爲。

       String str = test.getDate(new Date()

       {

           @Override

           @SuppressWarnings("deprecation")

           public String toLocaleString()

           {

              return this.toGMTString();

           }

       });

      

       System.out.println(str);

    }

}

 

 

有了匿名內部類,我們在給組件註冊事件時就可以用更爲簡單的方式 

public class SwingTest

{

    public static void main(String[] args)

    {

       JFrame frame = new JFrame("Anonymous InnerClass EventListener");

      

       JButton button = new JButton("Click me");

      

       button.addActionListener(new ActionListener()

        {

           @Override

           public void actionPerformed(ActionEvent e)

           {

              System.out.println("Welcome");

           }

       });

      

       frame.getContentPane().add(button);

      

       frame.addWindowListener(new WindowAdapter()

       {

           @Override

           public void windowClosing(WindowEvent e)

           {

              System.exit(0);

           }

       });

      

       frame.setSize(200,200);

      

       frame.setVisible(true);

    }

}


發佈了33 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章