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

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值