java内部类demo

时间:2022-11-12 03:31:07

内部类主要有三种:静态内部类,实例内部类,局部变量内部类

1.静态内部类,该类被static修饰,并且是成员变量,它只能访问外部类被static修饰的方法以及字段(这种说法只局限于不再内部类中创建外部类的对象)

public class Outer{

  public  String name;

  /**静态内部类
  * 只能访问外部类静态的字段
  * 可以有静态和非静态的方法以及字段
  * */
       public static class StaticClass{
          public void test(String name){
               System.out.println("呵呵呵呵"+name);
         }
   public String aaaString="aaaa";
     public static void show(){
           System.out.println("show");
         }
       }

//得到其内部类对象的方法

public static void main(String[] args) {      

//静态内部类
          Outer.StaticClass staticClass = new Outer.StaticClass();
  //静态内部类 静态方法调用
    Outer.StaticClass.show();

}

}

2.实例内部类,没有被static修饰,是外部类的成员变量,该内部类不能有static的字段和方法,否则就要将其声明为static的,该内部类中可以直接访问外部类所有的字段和方法,因为内部类持有外部类.this对象。test方法中name指的是方法的变量,而Outer.this.name 指的外部类的name字段

public class Outer{

public  String name;

    /** 实例内部类声明在成员变量上
    * 不能有静态方法或者字段
    * */
    public class InnerClass1{
      public String a ="asdf";
      public void test(String name){
      //Outer.this.name 代表的是外部的类
      Outer.this.name = name;
    }
    public void get(){
      System.out.println(Outer.this.name);
    }

  //得到其内部类对象的方法

public static void main(String[] args) {      

    //实例内部类
    Outer.InnerClass1 innerClass1 = new Outer().new InnerClass1();

}

}

}

3.局部变量内部类,有一点需要注意,该内部类访问局部变量时,该局部变量需要加上final 修饰,该内部类不能使用staic修饰,故该内部类不允许有静态的方法或者字段,该内部类,内部也持有外部类.this对象,可以访问外部类的所有方法和字段

public class Outer{

  public  String name;

  public void test(String address){

    /**内部类声明在局部变量上
    * 类不能使用static修饰
    * 字段不能被static修饰
    * */
    class InnerClass2{
      private String name;
      public int age;
      public void test(String name){
      Outer.this.name = name;
    }
  }
    InnerClass2 innerClass2 = new InnerClass2();
  }

}