四大内部类简单小结

本文详细介绍了Java中的四种内部类:实例内部类、静态内部类、局部内部类和匿名内部类的特点与使用方法,并通过示例代码说明每种内部类如何构建对象及访问权限。

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

1. 实例内部类(类的内部,方法外部,没有static修饰)

实例内部类也叫成员内部类,是最普通的内部类:

   1)实例内部类对象依托于外部类对象。

   2)对象构建方式:先构建外部类对象,再构建内部类对象

   3)可以访问外部类所有成员(静态,非静态), 即使是private的

   例如:

   classOuter

   {

      classInner

      {

        

      }

   }

   Outer.Innero1 = new Outer().new Inner();

注意:

1)虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。

2)内部类可以拥有 private访问权限、protected访问权限、public访问权限及包访问权限 。如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问; 如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。


2. 静态内部类(类的内部,方法外部,有static修饰)

   1)静态内部类不依赖于外部类对象。

   2)对象构建方式:允许直接内部类对象

   3)静态内部类只能访问外部类所有静态成员

   例如:

   classOuter

   {

      staticclass Inner

      {

  

      }

   }

   Outer.Innero1 = new Outer.Inner();

 

3. 局部内部类(定义在方法内部)

   1)局部内部类的对象只能在定义此类的方法内部构建

   2)局部内部类可以访问类中所有成员,但只能访问本方法内部使用final修饰的常量


例如:

public class OutterClass3 {
      public String name;
      public void run(final int a) {
            final int x = 100; 
            class InnerClass {
                   public int i;
                   public void innerRun() {
                         System.out.println(name);

                         System.out.println(i);

                         System.out.println(x);

                   //x定义如前面没有final,则不能访问x,(a同样)。是由于局部变量生存期的原因,加上final延长生存期就可以了

                   }

            }
      }
}

注意:局部内部类不能使用static修饰

    

4. 匿名内部类

匿名内部类是我们编写代码时,最常用的一种内部类,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。

   1)匿名内部类会有一个父类(可能是具体类,抽象类,接口)

   2)匿名内部类没有名字,但有类体(代码块)

   3)匿名内部类假如写到了方法内部,它就是特殊的局部内部类

 

   classA{public void run(){}}

   interfaceIM{void show();}

   classOuter

   {

      privateA a = new A(){public void run(){}};

      publicvoid display()

      {

         IMm = new IM(){void show(){};};

      }

   }

注意:

1)匿名内部类不能有访问修饰符和static修饰符的 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值