Java内部类

简介: Java内部类

内部类可以分为以下四种

**

成员内部类:直接定义在类当中的一个类,在类前面没有任何一个修饰符。

局部内部类:定义在方法里的内部类。

匿名内部类:属于局部内部的一种特殊情况。

静态内部类:在内部类前面加上一个static。

**


1.成员内部类

public class Outer {
  int num = 10;
  //外部成员方法
  public void outMethod() {
    System.out.println("外部成员方法");
  }
  //成员内部类
  class Inner{
    int num = 20;
    //内部类的成员方法
    public void innerMethod() {
      System.out.println("内部成员方法");
      System.out.println(num);//内部类的Num
      System.out.println(Outer.this.num);//外部num
      outMethod();
    }
  }
}
//测试类
public class Test {
  public static void main(String[] args) {
    //访问内部类方法
    Outer.Inner in = new Outer().new Inner();
    in.innerMethod();
    //访问外部类方法
    Outer out = new Outer();
    out.outMethod();
  }
}

2.局部内部类

class Outers {
  // 外部成员变量
  int num = 10;
  // 外部成员方法
  public void outerMethod() {
    System.out.println("外部成员方法");
  }
  public void function() {
    // 局部内部类
    class Inner {
      int num = 20;
      public void innerMethod() {
        System.out.println("内部类成员方法");
        // 访问外部成员
        System.out.println(Outers.this.num);
        outerMethod();
      }
    }
    // 访问内部类变量
    Inner i = new Inner();
    System.out.println(i.num);
    i.innerMethod();// 访问局部方法
  }
}
//测试类
class Tests {
  public static void main(String[] args) {
    // 访问内部类对象
    Outers o = new Outers();
    o.function();
  }
}

3. 静态内部类

创建对象格式:

外部类名.内部类名 对象名 = new 外部类名.内部类名();

特点:

静态内部类里访问静态变量不需要实例化

class Outer{
  static int outer=4;//静态变量
  //静态内部类
  static class Inner{
    int inner = 20;
    public void innerMethod() {
      System.out.println("内部类的成员变量"+inner);
      //静态内部类里访问静态变量不需要实例化
      System.out.println("外部类的成员变量"+outer);
    }
  }
}
//测试类
public class Test {
  public static void main(String[] args) {
    Outer.Inner oi = new Outer.Inner();
    oi.innerMethod();
  }
}

4.匿名内部类

格式:new 类名/接口名(){};

public abstract class Animal {
  //抽象方法
  abstract void eat();
}
//测试类
public class Test {
  public static void main(String[] args) {
    Animal o = new Animal() {
      @Override
      void eat() {
        System.out.println("吃肉");
      }
    };
    o.eat();
  }
}
目录
相关文章
|
3天前
|
Java
java中,剩下的这两个内部类不太好理解!
java中,剩下的这两个内部类不太好理解!
14 0
|
3天前
|
Java 编译器
java中常见的几种内部类,你会几个?(未完)
java中常见的几种内部类,你会几个?(未完)
15 1
|
5月前
|
Java 数据安全/隐私保护
【零基础学Java】—内部类的概念与分类(三十)
【零基础学Java】—内部类的概念与分类(三十)
|
3天前
|
Java
Java一分钟之-Java内部类与匿名类
【5月更文挑战第12天】本文介绍了Java的内部类和匿名类,包括成员内部类和局部内部类,以及匿名类的一次性子类实现。通过代码示例展示了它们的使用方法,同时提到了常见问题和易错点,如混淆内部类与嵌套类、匿名类的生命周期管理及内部类的访问权限,并给出了相应的避免策略。理解这些概念有助于提升代码质量。
17 3
|
3天前
|
Java
Java内部类
Java内部类
10 2
|
3天前
|
Java
什么是Java内部类,为什么使用它?
【4月更文挑战第13天】
20 1
|
3天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
38 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
3天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
14 0
|
3天前
|
存储 Java
java接口和内部类
java接口和内部类
|
3天前
|
Java 编译器
详解java各种内部类
详解java各种内部类