您当前的位置:首页 > 计算机 > 编程开发 > Java

Java 内部类

时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz

一、内部类的定义

将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类、嵌套类)

class Outer{
  private int num = 3;
  class Inner{//内部类
    void show(){
      System.out.println("inner show"+num);
    }
  }

  public void method(){
    Inner in = new Inner();
    in.show();
  }
}

class InnerClassDemo{
  public static void main(){

  }
}

编译成功会生成3个字节码文件

  • InnerClassDemo.class
  • Outer.class
  • Outer$Inner.class

注意:内部类与外部类用$符号链接。

二、内部类的访问特点

1、内部类可以直接访问外部类中的成员,包括私有成员。
那是因为内部类持有外部类的引用,外部类.this
2、而外部类要访问内部类中的成员必须要建立内部类对象。

三、内部类修饰符

内部类定义在一个类的成员位置上,那么内部类就可以用修饰符修饰。

class InnerClassDemo{
  public static void main(){
    //直接访问外部类中的内部类中的成员
    //格式如下:
    Outer.Inner in = new Outer().new Inner();
    in.show();
  }
}

注意:内部类大部分的情况下都是私有化的。

class Outer{
  private static int num = 3;
  static class Inner{//内部类
    void show(){
      System.out.println("inner show"+num);
    }
  }

  public void method(){
    Inner in = new Inner();
    in.show();
  }
}

class InnerClassDemo{
  public static void main(){
    //如果内部类是静态的,相当于一个外部类
    Outer.Inner in = new Outer.Inner();//不需要先建立外部对象。
    in.show();
  }
}
class Outer{
  private static int num = 3;
  static class Inner{//内部类
    static void show(){//如果内部类中定义了静态成员,该内部类也必须是静态的。
      System.out.println("inner show"+num);
    }
  }

  public void method(){
    Inner in = new Inner();
    in.show();
  }
}

class InnerClassDemo{
  public static void main(){
    //如果内部类是静态的,成员是静态的
    //就不需要对象了
    Outer.Inner.show();
  }
}
class Outer{
  int num = 3;
  class Inner{
    int num = 4;
    void show(){
      int num = 5;
      System.out.println(num);//5
      System.out.println(this.num);//4
      System.out.println(Outer.this.num);//3
    }
  }
}

四、局部内部类

内部类可以存放在局部位置上

class Outer{
  int num = 3;
  void method(){
    class Inner{
      void(){
        System.out.println("show ..."+num);//3
      }

      Inner in = new Inner();
      in.show();
    }
  }
}

class InnerClassDemo{
  public static void main(Srring[] args){
    new Outer().method();
  }
}

访问局部变量

class Outer{
  int num = 3;
  void method(){
    final int x = 9;//注意:此处必须加final关键字
    class Inner{
      void(){
        System.out.println("show ..."+x);//9
      }

      Inner in = new Inner();
      in.show();
    }
  }
}

class InnerClassDemo{
  public static void main(Srring[] args){
    new Outer().method();
  }
}
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐