整理java读书笔记十五之java中的内部类

下面是整理 Java 读书笔记十五之 Java 中的内部类的完整攻略。

什么是Java中的内部类

Java中的内部类就是在一个类的内部定义另一个类。内部类可以看作是外部类的一个成员,和其他成员一样,可以被类访问控制修饰符所控制。与外部类不同的是,内部类可以直接访问外部类的成员,包括私有成员,这个特征非常有用。

Java中的内部类有如下几种形式:

形式 描述
成员内部类 在类的成员位置上定义的类,最常见的一种形式。
静态内部类 在类的成员位置上且被static修饰的类。
方法内部类 在方法内部定义的类。
匿名内部类 在方法内部或代码块内部定义的一种未命名的内部类。
局部内部类 在方法内部定义并且只在该方法内部可见的类。

成员内部类

成员内部类,又称为普通内部类,其定义格式如下:

class Outer {
    private int num;
    class Inner {
        public void innerMethod() {
            System.out.println("inner method " + num);
        }
    }
    public void outerMethod() {
        Inner inner = new Inner();
        inner.innerMethod();
    }
}

从上面的代码可以看出,成员内部类 Inner 是在类 Outer 的成员位置上定义的一个类。在 Inner 类内部可以直接访问 Outer 类的成员变量和方法。如果要在外部类中使用内部类,需要先创建一个内部类的对象,然后才能访问内部类的成员方法和成员变量。

public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.innerMethod();
    }
}

上述代码中,创建了一个外部类的对象,然后通过这个对象创建了一个内部类的对象,最后使用内部类的对象调用了其 innerMethod 方法。

静态内部类

静态内部类与成员内部类不同的是,静态内部类被 static 修饰,在静态内部类中不能访问外部类的非静态成员,只能访问外部类的静态成员。静态内部类定义格式如下:

class Outer {
    private static int num;
    static class Inner {
        public void innerMethod() {
            System.out.println("inner method " + num);
        }
    }
}

静态内部类使用方法与成员内部类类似,同样需要通过对象或类名来调用。如果通过对象调用,需要先创建一个外部类的对象;如果通过类名调用,则可以直接使用类名。

public class Main {
    public static void main(String[] args) {
        Outer.Inner inner = new Outer.Inner();
        inner.innerMethod();
    }
}

上述代码中,通过类名直接创建静态内部类的对象,然后使用内部类的对象调用了其 innerMethod 方法。

总结

Java中的内部类有五种形式,分别是成员内部类、静态内部类、方法内部类、匿名内部类和局部内部类。

  • 成员内部类定义在外部类的成员位置上,可以直接访问外部类的成员变量和方法。
  • 静态内部类被 static 修饰,只能访问外部类的静态成员变量和方法。
  • 通过对象或类名来调用内部类,使用方法类似,但区别在于通过对象调用时需要创建一个外部类的对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:整理java读书笔记十五之java中的内部类 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • deepqnetwork(dqn)原理解析

    Deep Q Network (DQN)原理解析 Deep Q Network (DQN)是一种可以将深度学习应用于强化学习的算法,由Google DeepMind公司在2015年提出。DQN旨在解决传统Q学习中状态空间过大的问题,在一定程度上缓解了强化学习中的稀疏奖励和延迟奖励问题。 Q-Learning 与 DQN DQN是基于Q-learning的改进…

    其他 2023年3月28日
    00
  • Android自定义View圆形进度条控件(三)

    Android自定义View圆形进度条控件(三)攻略 本攻略将详细讲解如何创建一个自定义的圆形进度条控件,并提供两个示例说明。 步骤一:创建自定义View类 首先,我们需要创建一个自定义的View类来实现圆形进度条的功能。以下是一个简单的示例代码: public class CircleProgressBar extends View { private i…

    other 2023年9月7日
    00
  • VB FileSystemObject对象实例详解

    VB FileSystemObject对象实例详解 在VB中,FileSystemObject对象(以下简称FSO对象)是操作文件或文件夹的主要工具,可以用于对文件和文件夹进行增、删、改、查等操作。本文将详细介绍FSO对象的各种方法和属性。 创建FSO对象实例 创建FSO对象实例需要引用Microsoft Scripting Runtime库,并在代码中通过…

    other 2023年6月27日
    00
  • C语言完数的实现示例

    下面是关于“C语言完数的实现示例”的完整攻略。 1. 什么是完数 完数又称为完全数,指一个正整数等于除它本身外其他所有因子之和的数。例如,6是一个完数,因为它的因子为1, 2, 3,而1+2+3=6。 2. 完数的判断方法 要判断一个数是否为完数,通常需要遍历该数的所有因子,将因子加和,再判断和与该数是否相等。以下是一个基本的完数判断方法的示例代码: int…

    other 2023年6月27日
    00
  • smarty的section嵌套循环用法示例

    Smarty的section嵌套循环用法示例攻略 Smarty是一种流行的模板引擎,用于在PHP应用程序中分离逻辑和视图。其中,section是Smarty模板引擎中的一个重要特性,它允许我们在模板中创建循环结构。本攻略将详细讲解section的嵌套循环用法,并提供两个示例说明。 1. 基本语法 section的基本语法如下: {section name=s…

    other 2023年7月27日
    00
  • pycharm 批量修改变量名称的方法

    PyCharm 批量修改变量名称的方法攻略 在 PyCharm 中,你可以使用重构功能来批量修改变量名称。下面是详细的攻略,包含了两个示例说明。 步骤一:选择要修改的变量 首先,你需要选择要修改的变量。可以通过以下两种方式来选择变量: 手动选择:在编辑器中使用鼠标选择要修改的变量。你可以选择变量的任意部分,包括变量名和类型注释。 使用快捷键:将光标放在要修改…

    other 2023年8月8日
    00
  • C语言数据的存储详解

    C语言数据的存储详解 1. 前言 我们在编写C语言程序的时候,不可避免地涉及到内存的管理。C语言程序中的变量、指针、数组等数据都需要存储在内存中。因此,了解C语言中数据存储的机制和原理是非常重要的。 在本篇文章中,我们将详细讲解C语言中数据存储的相关知识,包括变量的声明和定义、变量存储的位置、作用域和生命周期等方面。文章会通过代码示例来帮助大家更好地理解。 …

    other 2023年6月27日
    00
  • (一)rfb协议概述

    以下是“(一)rfb协议概述”的详细讲解,包括rfb协议的定义、工作原理、协议流程、两个示例说明等内容。 (一)rfb协议概述 1. rfb协议的定义 rfb协议是一种远程桌面协议,用于在客户端和服务器之间传输图形化界面。rfb协议是一种开放的协议,可以在不同的操作系统和平台上使用。 2. rfb协议的工作原理 rfb协议的工作原理如下: 客户端连接到服务器…

    other 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部