Java 内部类

发布于 2021-06-26 12:29:57 字数 2758 浏览 1242 评论 0

一、内部类的定义

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文