【JavaSE专栏65】内部类的使用,定义在其他类内部的类

简介: 【JavaSE专栏65】内部类的使用,定义在其他类内部的类

本文讲解了 Java 中内部类概念及语法,并给出了样例代码。内部类是定义在其他类内部的类,内部类可以访问外部类的成员,并且可以起到隐藏和封装的作用。

一、什么是内部类

Java 中的内部类是定义在其他类内部的类

内部类可以访问外部类的成员(包括私有成员),并且可以起到隐藏和封装的作用。

下面是一个简单的 Java 内部类的示例代码,请同学们复制到本地执行。

public class OuterClass {
    private int outerVariable = 10;
    public void outerMethod() {
        InnerClass innerObj = new InnerClass();
        innerObj.innerMethod();
    }
    public class InnerClass {
        private int innerVariable = 5;
        public void innerMethod() {
            System.out.println("Inner Variable: " + innerVariable);
            System.out.println("Outer Variable: " + outerVariable);
        }
    }
    public static void main(String[] args) {
        OuterClass outerObj = new OuterClass();
        outerObj.outerMethod();
    }
}

在这个例子中,OuterClass 包含了一个内部类 InnerClass

InnerClass 可以直接访问外部类 OuterClass 的成员变量 outerVariable,并且 OuterClass 可以通过创建 InnerClass 的实例来调用 innerMethod() 方法。

main() 方法中,我们创建了一个 OuterClass 对象并调用了 outerMethod() 方法,它又创建了一个 InnerClass 对象并调用了 innerMethod() 方法。在 innerMethod() 方法中,我们打印出了内部类的成员变量 innerVariable 和外部类的成员变量 outerVariable

这个示例展示了内部类可以访问外部类的成员,以及如何创建和使用内部类的实例。

内部类分为以下 4 44 种类型,请同学们认真学习。

  1. 成员内部类:定义在类的内部,并且与外部类的成员级别相同。成员内部类可以访问外部类的所有成员,包括私有成员。创建成员内部类的实例时,必须先创建外部类的实例。
  2. 静态内部类:使用 static 关键字修饰的内部类,它与外部类的实例无关,可以直接通过外部类进行访问。静态内部类不能访问外部类的非静态成员,只能访问外部类的静态成员。
  3. 方法内部类:定义在方法内部的类,只能在该方法的作用域内使用。方法内部类可以访问外部类的成员(包括方法的参数和局部变量),但是只能访问 final 修饰的局部变量。
  4. 匿名内部类:没有名字的内部类,用于创建只需要使用一次的类。匿名内部类通常是在创建接口对象或者继承父类的时候使用。

内部类的特点包括以下 4 44 点,请同学们认真学习。

  • 内部类可以访问外部类的成员,包括私有成员。
  • 内部类可以隐藏在外部类中,对外部类的其他类不可见。
  • 内部类可以实现多重继承,一个类可以同时继承多个内部类。
  • 内部类可以访问外部类的实例,包括实例变量和实例方法。

内部类的使用场景包括以下 3 33 点,请同学们认真学习。

  • 封装:将内部类设为私有,只供外部类使用。
  • 代码组织:将相关的类组织在一起,提高代码的可读性和可维护性。
  • 回调机制:内部类可以实现接口或继承抽象类,用于回调方法的实现。

总之,内部类是一种特殊的类,它可以访问外部类的成员,并且用于实现封装、代码组织和回调等功能。


二、内部类和普通类有什么区别

Java 中的内部类和普通类有以下 6 66 点区别,请同学们认真学习。

  1. 访问权限:内部类可以访问外部类的私有成员,而普通类不能直接访问外部类的私有成员。这是因为内部类是外部类的成员,可以享有外部类成员的所有访问权限。
  2. 关联性:内部类与外部类之间存在一种关联性,内部类可以访问外部类的成员,包括实例变量和方法。而普通类之间没有这种特殊的关联性。
  3. 创建方式:内部类的实例必须依赖于外部类的实例,需要先创建外部类的实例,然后再创建内部类的实例。而普通类可以直接通过new关键字创建实例。
  4. 类型:内部类可以分为成员内部类、静态内部类、方法内部类和匿名内部类。而普通类只有一种类型。
  5. 隐藏性:内部类可以被隐藏在外部类中,对外部类的其他类不可见。而普通类不具备这种隐藏性,对于外部类的其他类是可见的。
  6. 使用场景:内部类通常用于封装、组织代码、实现回调机制等特殊的需求场景。普通类更适合用于一般的面向对象编程。

总之,内部类与普通类之间的区别主要体现在访问权限、关联性、创建方式、类型、隐藏性和使用场景等方面,同学们可以根据具体的需求,可以选择合适的类类型来实现功能。


三、内部类的应用场景

内部类在 Java 中有很多应用场景,以下是一些常见的 6 66 种应用场景。

  1. 实现回调机制:内部类可以实现接口或继承抽象类,用于回调方法的实现。通过内部类实现回调机制可以简化代码的编写,使代码更加清晰和可维护。
  2. 封装和隐藏:内部类可以被私有修饰,将其隐藏在外部类中,只供外部类内部进行访问。这样可以实现封装性,防止外部类以外的其他类直接访问内部类。
  3. 优化代码结构:内部类可以将相关的类组织在一起,提高代码的可读性和可维护性。通过将内部类定义在需要使用的地方,可以减少类的数量,简化代码结构。
  4. 实现多重继承:内部类可以实现多重继承,一个类可以同时继承多个内部类。这样可以避免 Java 不支持多继承的限制,实现更灵活的类的关系。
  5. 访问外部类私有成员:内部类可以访问外部类的私有成员,包括私有变量和私有方法。这样可以实现对外部类私有成员的访问和操作,增强了内部类的功能。
  6. 匿名内部类:内部类可以用于创建只需要使用一次的类,即匿名内部类。通过匿名内部类,可以在创建接口对象或继承父类的时候,快速定义相关的实现逻辑,简化代码。


四、内部类面试题

  1. Java 中的内部类有哪几种类型?分别描述它们之间的区别和使用场景。
  2. 内部类可以访问外部类的私有成员吗?为什么?
  3. 如何在外部类以外的地方创建内部类的实例?
  4. 静态内部类和非静态内部类有什么区别?
  5. 为什么匿名内部类可以访问外部类的局部变量,而不需要声明为 final?
  6. 如何访问静态内部类和非静态内部类的成员变量和方法?
  7. 内部类是否可以拥有自己的内部类?
  8. 什么是内部类的作用域?
  9. 如何在外部类中创建内部类的实例?
  10. 内部类和继承关系有什么异同之处?

五、总结

本文讲解了 Java 中内部类的概念及语法,并给出了样例代码,在下一篇博客中,将讲解 Java instanceof 关键字和数据类型转换的知识点。


相关文章
【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?
【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?
193 0
|
4月前
|
Java 程序员
【Java探索之旅】继承概念_语法_父类的成员访问
【Java探索之旅】继承概念_语法_父类的成员访问
50 10
|
5月前
|
数据安全/隐私保护
类与对象\类的定义
类与对象\类的定义
24 0
|
5月前
|
Java
JavaSE——面向对象高级三(1/5)-内部类概述、成员内部类、静态内部类、局部内部类
JavaSE——面向对象高级三(1/5)-内部类概述、成员内部类、静态内部类、局部内部类
34 0
|
5月前
|
Java 编译器 数据处理
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
56 0
|
6月前
|
Java
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
38 0
|
Java
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
85 0
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
|
Java 编译器 数据安全/隐私保护
Java——内部类(概念理解+应用举例)
Java——内部类(概念理解+应用举例)
Java——内部类(概念理解+应用举例)
|
Java 数据安全/隐私保护 Python
Java类的概念|包括封装、继承、多态|以及成员方法、权限修饰符、this关键字等类的相关的概念知识|Java必学知识点
继承的图形化概念:用最形象的图像来说明继承的概念其实很简单,就拿三角形和等腰三角形和等边三角形来说 等腰三角形和等边三角形都具有三角形的性质就是三个角三条边,那么三角形就是父类,等腰三角形和等边三角形就是三角形的子类,然而等边三角形是特殊的等腰三角形,所以在等腰三角形和等边三角形两者之间,等腰三角形是父类,等边三角形是子类!
191 0
Java类的概念|包括封装、继承、多态|以及成员方法、权限修饰符、this关键字等类的相关的概念知识|Java必学知识点
|
Java C++
Java中类的内部成员之五: 内部类
Java中类的内部成员之五: 内部类
96 0