21xrx.com
2024-09-20 08:10:41 Friday
登录
文章检索 我的文章 写文章
Java内部类详解:定义、使用及案例
2023-06-16 10:37:36 深夜i     --     --
Java内部类 成员内部类 局部内部类 匿名内部类 静态内部类

Java内部类是指在一个类的内部定义的类,它可以访问外部类中的私有成员变量和方法,但是外部类不能访问内部类的私有成员变量和方法。Java内部类的定义方式如下:


public class OuterClass {

  ...

  public class InnerClass

    ...

  

}

其中,OuterClass是外部类,InnerClass是内部类。内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。每种类型的内部类都有自己的定义方式和使用场景。下面分别进行详细介绍。

1. 成员内部类

成员内部类是定义在外部类的成员位置上的类,它可以访问外部类的成员变量和方法。示例代码如下:


public class OuterClass {

  private String name = "OuterClass";

  public class InnerClass {

    public void printName() {

      System.out.println(name);

    }

  }

}

public class Main {

  public static void main(String[] args) {

    OuterClass outer = new OuterClass();

    OuterClass.InnerClass inner = outer.new InnerClass();

    inner.printName(); // 输出 OuterClass

  }

}

2. 局部内部类

局部内部类是定义在方法内部的类,它只能在方法内部被使用,作用范围比较小。示例代码如下:


public class OuterClass {

  private String name = "OuterClass";

  public void printName() {

    class InnerClass {

      public void print() {

        System.out.println(name);

      }

    }

    InnerClass inner = new InnerClass();

    inner.print(); // 输出 OuterClass

  }

}

public class Main {

  public static void main(String[] args) {

    OuterClass outer = new OuterClass();

    outer.printName();

  }

}

3. 匿名内部类

匿名内部类是没有名字的内部类,它必须在定义的同时被实例化,使用场景比较特殊。示例代码如下:


public class OuterClass {

  public interface InnerInterface {

    void print();

  }

  public void test() {

    InnerInterface inner = new InnerInterface() {

      public void print() {

        System.out.println("test");

      }

    };

    inner.print(); // 输出 test

  }

}

public class Main {

  public static void main(String[] args) {

    OuterClass outer = new OuterClass();

    outer.test();

  }

}

4. 静态内部类

静态内部类是使用static修饰的内部类,它可以访问外部类的静态成员变量和方法,但是不能访问普通成员变量和方法。示例代码如下:


public class OuterClass {

  private static String name = "OuterClass";

  public static class InnerClass {

    public void printName() {

      System.out.println(name);

    }

  }

}

public class Main {

  public static void main(String[] args) {

    OuterClass.InnerClass inner = new OuterClass.InnerClass();

    inner.printName(); // 输出 OuterClass

  }

}

综上所述,Java内部类的使用场景比较灵活,可以根据实际需要选择适合的类型来定义内部类。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复