静态内部类与非静态内部类

最大区别,静态内部类只有一个与外围类的对应实例,而 非静态内部类只要每被调用一次都会有一个实例与外围类对应,比较耗费资源空间

非静态内部类

import java.util.Locale;
 public class TestCalc{
//非静态内部类
public static void main(String[] args) {
        String name="let go";
        TestCalc tc=new TestCalc();        
         //必须要有外围实例  比如 TestCalc类的实例tc
        tc.new InnerClass().sayhello(name);          
    }


  private void AroundCall()
  {
    System.out.println("THIS IS CALL  AroundCall ");
  }


   private  class InnerClass{

      public void sayhello(String name)
      {
            System.out.println(name + "  welcome afertnoon !");
            AroundCall();
      }
   } 
 } 

 

静态内部类

 import java.util.Locale;
 public class TestCalc{
//静态内部类    
 public static void main(String[] args) {
        String name="let go";
       //不需要外围实例  [1] [2] 都可以
       // new InnerClass().sayhello(name);   //[1]       
       new TestCalc.InnerClass().sayhello(name);//[2] 

    }


  private void AroundCall()
  {
    System.out.println("THIS IS CALL  AroundCall ");
  }

  

  private static void staticAroundCall()
  {
    System.out.println("THIS IS CALL staticAroundCall ");
  }

public static class InnerClass{

      public void sayhello(String name)
      {
            System.out.println(name + "  welcome afertnoon !");
       //AroundCall(); 编译不通过
new TestCalc().AroundCall();
       staticAroundCall();//可以直接访问外围静态方法 } } }

局部类 是只能在方法里面创建的类,并且不能定义为public,protected,private或者static类型

 

匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。
匿名内部类会隐式地继承一个父类或实现一个接口。这个例子最典型的就是 button事件,实现监听,并且有处理响应:

button.addActionListener(new ActionListener(){
         //实现接口中的方法
        @Override
         public void actionPerformed(ActionEvent e) {
            System.out.println("使用匿名内部类实现ActionListener接口");
         }
     });

posted on 2016-03-30 15:16  rojas  阅读(247)  评论(0编辑  收藏  举报