Java - 内部类

本文详细解析了Java内部类的四种类型:普通内部类、静态内部类、匿名内部类和局部内部类,包括它们的创建、使用场景及访问权限。同时,文章还探讨了内部类之间的嵌套规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内部类分为四类:

1. 普通内部类

在类里创建一个普通类

public class InnerClassTest{

  public class InnerClassA{

  }

}

 

在这里InnerClassA作为InnerClassTest的普通内部类,相当于外部类的一个成员字段。这种情况下,创建内部类对象时要先创建外部类对象,比如创建InnerClassA的对象: 

InnerClassTest innerClassTest = new InnerClassTest();

InnerClassA innerClassA = innerClassTest.new InnerClassA();

此时内部类对象可以访问外部类对象,外部类对象也可以通过内部类的引用来访问内部类的对象。

2. 静态内部类

在类里创建一个静态类

public class InnerClassTest{

  public class StaticInnerClassA{

  }

}

 

因为一个类的静态成员独立于这个类的任何一个对象存在,在具有访问权限的情况下,我们都可以通过类名.静态成员名来访问。同理,静态内部类也是作为外部类的静态成员,创建一个类的静态对象类不需要依赖于外部类对象。比如常见InnerClassTest对象:

InnerClassTest.StaticInnerClassA staticInnerClassA = new InnerClassTest.StaticInnerClassA();

此时静态内部类是无法访问外部类的非静态成员,因为外部类的非静态成员是属于外部类对象的,而静态类独立于对象,所以静态内部类不能访问外部类的非静态成员。 外部类可以访问静态内部类的对象。

3. 匿名内部类

在方法参数中新建一个接口或者类对象,并实现这个接口声明或者类中已有的方法。

public class InnerClassTest{

  interface OnClickListener{

    void onClick(Object obj);

  }

  private void anonymousClassTest{

    OnClickListener onclickListener = new OnClickListener(){

      @override

      public void onClick(Object obj){

       //to do

      }

    }

    onclickListener.onClick(new Object(){

    @override

    public String toString(){

      return "object";

    }

    });

  }

}

 

此时匿名内部类中可以使用外部类的属性,但是外部类无法访问匿名内部类的属性,因为外部类无法找到匿名内部类的类名。

4. 局部内部类

声明在一个方法体浊者一段代码块中

public class InnerClassTest{

  private void partInnerClassTest{

    class A{

    }

    A a = new A();

    if(true){

      class B{

      }

      B b = new B();

    }

   // B b = new B(); can't use

  }

}

 

局部内部类只在当前块里起作用,出了代码块,该局部内部类就失效了。同理,局部内部类可以访问外部类对象,但外部类无法访问局部内部类对象。

=========================================================

内部类嵌套:内部类定义内部类

1. 普通内部类:可以嵌套普通内部类、匿名内部类、局部内部类,不可以嵌套静态内部类。

2. 静态内部类:可以嵌套普通内部类、静态内部类、匿名内部类、局部内部类。

3. 匿名内部类:定义方式同普通内部类。

4. 局部内部类: 定义方式同匿名内部类。

 

转载于:https://www.cnblogs.com/zwting/p/9830907.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值