21xrx.com
2024-11-05 22:38:39 Tuesday
登录
文章检索 我的文章 写文章
Java内部类的使用及案例分析
2023-06-15 09:37:12 深夜i     --     --
Java内部类 成员内部类 局部内部类

Java内部类是指定义在另一个类内部的一个类。在Java中,内部类相对于普通的类具有更加的灵活性和强大的功能,它可以访问外部类的所有成员变量、方法以及静态成员,而外部类无法访问内部类的成员。本文将分别对Java内部类的使用以及案例进行介绍。

1. Java内部类的使用

Java内部类的使用首先需要了解两种内部类的类型:成员内部类和局部内部类。

1.1 成员内部类

成员内部类就是在一个类的内部定义的另一个类,其定义在外部类的内部,而不是在方法中。举个例子:


public class OuterClass {

  private int x = 10;

  class InnerClass {

    public void print() {

      System.out.println("x is " + x);

    }

  }

}

上述代码就定义了一个名为InnerClass的成员内部类,它可以访问外部类的私有成员变量x,并进行输出。使用方式如下:


OuterClass outer = new OuterClass();

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

inner.print();

通过outer.new InnerClass()方法获取内部类对应的对象,再调用内部类提供的方法即可,该输出结果为:x is 10。

1.2 局部内部类

局部内部类也是在一个类的内部定义的另一个类,但是它的定义在方法中。举个例子:


public class OuterClass {

  private int x = 10;

  public void method() {

    class InnerClass {

      public void print() {

        System.out.println("x is " + x);

      }

    }

    InnerClass inner = new InnerClass();

    inner.print();

  }

}

上述代码就定义了一个名为InnerClass的局部内部类,并在method()方法中创建了该内部类对应的对象。使用方式如下:


OuterClass outer = new OuterClass();

outer.method();

该输出结果同样为:x is 10。

2. Java内部类案例

下面给出一个基于成员内部类的案例,实现一个简单的计数器。我们定义一个外部类Counter,内部定义一个成员内部类CounterInternal,用来存放计数器的当前值。实现代码如下:


public class Counter {

  private int count = 0;

  class CounterInternal {

    public void increment() {

      count++;

    }

    public void decrement()

      count--;

    

    public int getValue()

      return count;

    

  }

  public void print() {

    CounterInternal inner = new CounterInternal();

    inner.increment();

    System.out.println("current count is " + inner.getValue());

  }

}

我们首先定义了一个计数器的初始化值为0,并实现了一个名为CounterInternal的成员内部类,它包含三个方法:increment()实现计数器加1,decrement()实现计数器减1,getValue()获取计数器当前值。然后我们在print()方法中实例化CounterInternal,并调用increment()方法进行计数器加1,并输出当前值。

使用方式如下:


Counter counter = new Counter();

counter.print();

该输出结果为:current count is 1。

3. 关键词

Java内部类、成员内部类、局部内部类

  
  

评论区

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