Java 内部类

06-01 1509阅读

文章目录

  • 内部类
    • 实例内部类
    • 静态内部类
    • 匿名内部类
    • 局部内部类

      Java 内部类

      内部类

      1. 一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类
      2. 可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类

      实例内部类

      1. 如何实例化内部类
      2. 外部类的成员在内部类中都能直接访问

      Java 内部类

      package test2;
      class outClass{
          private int a = 3;
          public static int b = 2;
          class inClass{
              private int  a = 1;
              // 在运行时确定的
              // static修饰的调用不需要实例化就能调用,而这个变量在内部类需要实例化内部类才能使用
              // public static int d = 2;
              public static final int d = 3;// 在编译的时候就确定了,是个常量,不依赖于实例化
              public int e = 2;
              public void test() {
                  System.out.println("inClass::test");
                  System.out.println(this.a);// 1
                  System.out.println(a);// 1
                  System.out.println(outClass.this.a);// 3
              }
          }
          public void test(){
              inClass inclass = new inClass();
              System.out.println(inclass.a);
              System.out.println(inclass.e);
              System.out.println("outClass::test");
          }
      }
      public class testnbl {
          public static void main(String[] args) {
              // 实例化内部类
              outClass class1 = new outClass();
              outClass.inClass class2 = class1.new inClass();
              outClass.inClass class3 = new outClass().new inClass();
              class1.test();
              class2.test();
          }
      }
      
      1. 字节码文件

        外部类类名$内部类类名.class

      Java 内部类

      静态内部类

      1. 静态内部类不需要有外部类对象的引用

        Java 内部类

      2. 创建外部类对象的引用
      class oclass{
          private int a = 1;
          public static int b = 2;
          public int c = 3;
          static class iclass{
              public int d = 4;
              public static int e = 5;
              private int f = 6;
              public void test(){
                  oclass Out = new oclass();
                  System.out.println(Out.a);
                  System.out.println(b);
                  System.out.println(Out.c);
                  System.out.println(d);
                  System.out.println(e);
                  System.out.println(f);
                  System.out.println("iclass::test");
              }
          }
          public void test(){
              System.out.println("oclass::test");
          }
      }
      public class testnbl {
          public static void main(String[] args) {
             oclass.iclass a = new oclass.iclass();
             a.test();
          }
      }
      

      匿名内部类

      1. 你有一个类实现了IA接口,重写了test方法
      interface IA{
          void test();
      }
      public class testnbl {
          public static void main(String[] args) {
              // 第一种方法调用
              // 匿名内部类对象
              IA a = new IA(){
                  public void test(){
                      System.out.println("重写了接口的方法!");
                  }
              };
              a.test();
              
              // 第二种方法调用
               new IA(){
                  public void test(){
                      System.out.println("重写了接口的方法!");
                  }
              }.test();
          }
      }
      

      局部内部类

      1. 只能在其方法内部使用
      2. 不能被public和static修饰符修饰
      3. 很少使用

      Java 内部类

      4. 字节码文件

      Java 内部类

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码