21xrx.com
2024-11-22 07:41:52 Friday
登录
文章检索 我的文章 写文章
Java中的内部类和外部类详解
2023-06-16 13:29:58 深夜i     --     --
Java 内部类 外部类

Java中的内部类和外部类是面向对象编程中的重要概念,也是Java语言一个重要特性,本文将详细介绍Java中内部类和外部类的定义、使用方法以及优缺点等相关知识,并附带代码案例进行实际演示。

一、内部类的定义和使用方法

内部类是定义在另一个类中的类,它可以访问外部类的所有成员,包括私有成员,而外部类则不能访问内部类的成员。内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。

1. 成员内部类

成员内部类指定义在另一个类中的非静态内部类,如下所示:


public class OuterClass {

  private int x;

  public class InnerClass {

    private int y;

    public void display() {

      System.out.println("x = " + x + ", y = " + y);

    }

  }

}

在外部类中创建内部类的实例,需要先创建外部类的实例,然后使用外部类实例的名字来创建内部类的实例,如下所示:


OuterClass outer = new OuterClass();

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

inner.display();

2. 局部内部类

局部内部类指定义在方法或作用域内的内部类,它们不能有访问修饰符,只能访问final类型的局部变量和方法的参数。

3. 匿名内部类

匿名内部类指没有名字的内部类,通常用于实现某个接口或抽象类的非常简短的代码段。

4. 静态内部类

静态内部类是被声明为静态的内部类,它不能访问外部类的非静态成员,但它可以直接实例化而无需通过外部类实例化。静态内部类的定义方式与普通内部类的方式相同,只是在类前加上static关键字。

二、外部类的定义和使用方法

外部类是包含内部类的类,它可以访问内部类的所有成员,但内部类不能访问外部类的私有成员。

示例代码如下:


public class OuterClass {

  private int x;

  public void display() {

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

  }

  public static void main(String[] args) {

    OuterClass outer = new OuterClass();

    outer.x = 10; // 访问外部类的x变量

    outer.display(); // 调用外部类的display方法

  }

}

外部类可以访问内部类的成员,示例代码如下:


public class OuterClass {

  private int x;

  public class InnerClass {

    private int y;

    public void display() {

      System.out.println("x = " + x + ", y = " + y);

    }

  }

  public void displayInner() {

    InnerClass inner = new InnerClass();

    inner.y = 5; // 访问内部类的y变量

    inner.display(); // 调用内部类的display方法

  }

  public static void main(String[] args) {

    OuterClass outer = new OuterClass();

    outer.displayInner(); // 调用外部类的displayInner方法

  }

}

三、内部类和外部类的优缺点

内部类的优点:

1. 内部类可以访问外部类的私有成员。

2. 内部类可以定义在访问它的方法或作用域内部,从而实现对同一实体的多重访问。

内部类的缺点:

1. 内部类会增大字节码文件的大小。

2. 内部类实例需要额外的内存开销。

外部类的优点:

1. 外部类只有一个构造方法,因此比内部类更容易被实例化。

2. 外部类的实例比内部类的实例更加轻量级。

外部类的缺点:

1. 外部类不能访问内部类的私有成员。

四、本文关键词

Java、内部类、外部类

  
  

评论区

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