Java基础-内部类(inner class)

  1. 概念定义

    • 在 Java 中,内部类(Inner Class)是定义在另一个类内部的类。包含内部类的类称为外部类(Outer Class)。内部类可以访问外部类的成员(包括私有成员),并且可以提供一种将相关的类组织在一起的方式,使得代码结构更加紧凑和模块化。
  2. 内部类的种类

    • 成员内部类(Member Inner Class)
      • 定义在类的内部,和成员变量、成员方法处于同一级别。就像成员变量一样,成员内部类可以使用各种访问修饰符(publicprivateprotected)。
      • 例如:
     class Outer {
         private int outerVariable = 10;
         class Inner {
             public void accessOuterVariable() {
                 System.out.println("外部变量的值:" + outerVariable);
             }
         }
     }
  • 在这里,InnerOuter的成员内部类,它可以访问Outer类中的outerVariable
  • 静态内部类(Static Inner Class)
    • static关键字修饰的内部类。静态内部类和外部类的实例没有关联,它不能直接访问外部类的非静态成员,但可以访问外部类的静态成员。
    • 例如:
     class Outer {
         private static int staticOuterVariable = 20;
         static class StaticInner {
             public void accessStaticOuterVariable() {
                 System.out.println("外部静态变量的值:" + staticOuterVariable);
             }
         }
     }
  • 在这个例子中,StaticInnerOuter的静态内部类,它可以访问Outer类中的静态变量staticOuterVariable
  • 方法内部类(Method Inner Class)
    • 定义在方法内部的类,也称为局部内部类。它的作用域仅限于定义它的方法内部,并且可以访问方法中的局部变量(但要求这些局部变量是final的,从 Java 8 开始,实际上是隐式final)。
    • 例如:
     class Outer {
         public void outerMethod() {
             final int localVariable = 30;
             class MethodInner {
                 public void accessLocalVariable() {
                     System.out.println("局部变量的值:" + localVariable);
                 }
             }
             MethodInner mi = new MethodInner();
             mi.accessLocalVariable();
         }
     }

  • 这里,MethodInnerouterMethod方法内部的类,它可以访问outerMethod中的localVariable
  • 匿名内部类(Anonymous Inner Class)
    • 没有名字的内部类,通常用于创建只需要使用一次的类。它一般是继承一个类或者实现一个接口,并且在定义的同时创建一个实例。
    • 例如,创建一个Runnable接口的匿名内部类来创建一个线程:
     public class Main {
         public static void main(String[] args) {
             Thread thread = new Thread(new Runnable() {
                 @Override
                 public void run() {
                     System.out.println("线程正在运行");
                 }
             });
             thread.start();
         }
     }
  • 在这个例子中,new Runnable() {... }就是一个匿名内部类,它实现了Runnable接口,并且在定义的同时创建了一个实例作为Thread类的参数。
  1. 内部类的优点
    • 增强封装性:内部类可以访问外部类的私有成员,同时外部类可以控制内部类的访问权限,使得数据和行为的封装更加紧密。
    • 逻辑分组:可以将相关的类放在一起,使代码结构更清晰。例如,一个表示图形的外部类可以有内部类分别表示图形的绘制策略、计算面积策略等。
    • 实现多重继承(某种程度上):虽然 Java 不支持类的多重继承,但通过内部类可以实现类似的效果。例如,一个类可以通过内部类实现多个接口,从而具有多种行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值