【从零开始学习JAVA | 第十九篇】初识内部类

这篇具有很好参考价值的文章主要介绍了【从零开始学习JAVA | 第十九篇】初识内部类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【从零开始学习JAVA | 第十九篇】初识内部类,【从零开始学习JAVA】,学习

前言:

内部类是类的五大成员。一个类的其他的成员分别是属性,方法,构造方法,代码块。本文将详细介绍什么是内部类,以及内部类的意义。

内部类:

内部类(Inner Class)是 Java 中的一个特殊概念,它指的是一个类定义在另一个类内部的类。内部类可以访问外部类的成员,包括私有的成员和方法。内部类还可以访问同一个外部类中其他内部类的成员。内部类是 Java 实现面向对象的一个重要机制,常用于事件驱动编程中。

Java 中内部类的分类有以下几种:

1. 成员内部类:定义在外部类中,但是在外部类的成员方法之外。
2. 静态内部类:定义在外部类中,但是在外部类的静态方法中或者外部类的静态区域中。
3. 局部内部类:定义在外部类的方法体中或者一个作用域内。

下面是一个成员内部类的示例:


public class Outer {
    private int num = 1;
    private String name = "Outer";
    public class Inner {
        public void print() {
            System.out.println("num is " + num + ", name is " + name);
        }
    }
}

在以上代码中,定义了外部类 `Outer` 和成员内部类 `Inner`,`Inner` 类可以访问 `Outer` 类中的私有成员 `num` 和 `name`。

下面是一个示例程序,演示如何创建和使用成员内部类:

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

在以上示例中,首先创建了外部类 `Outer` 的实例 `outer`,然后使用实例 `outer` 创建了内部类 `Inner` 的实例 `inner`,最后调用 `inner` 的方法 `print()` 输出结果。

总之,内部类是 Java 实现面向对象编程的重要机制,可以访问外部类的成员和方法,是实现一些事件驱动或者复杂逻辑的必要手段之一。

内部类的分类:

1.成员内部类:

成员内部类是和外部类的成员变量和方法平级的,可以访问外部类的所有变量和方法,它的定义方式如下:

public class Outer {
    private int data;
    public void method() {
        Inner inner = new Inner();
        inner.print();
    }
    class Inner {
        public void print() {
            System.out.println(data);
        }
    }
}

上面的代码定义了一个 Outer 类和一个 Inner(Nested) 类,在 Outer 类中定义了一个成员内部类 Inner,它可以访问 Outer 类中的 data 变量。

使用成员内部类的方式如下:

Outer outer = new Outer();
outer.method(); // 输出 "0"

2. 静态内部类

静态内部类是在外部类内部定义的一个静态类,它独立于外部类的对象,也就是说,即使没有创建外部类的对象,我们仍然可以使用静态内部类,静态内部类的定义方式如下:

public class Outer {
    private static int data;
    public static class Inner {
        public void print() {
            System.out.println(data);
        }
    }
}

使用静态内部类的方式如下:

Outer.Inner inner = new Outer.Inner();
inner.print(); // 输出 "0"

这里需要注意,静态内部类中只能访问外部类的静态变量或静态方法。

3. 局部内部类

局部内部类是定义在方法内部的内部类,只能在该方法内部使用,它的定义方式如下:


public class Outer {
    private int data;
    public void method() {
        class Inner {
            public void print() {
                System.out.println(data);
            }
        }
        Inner inner = new Inner();
        inner.print();
    }
}

上面的代码定义了一个局部内部类 Inner,它可以访问外部类中的 data 变量。

使用局部内部类的方式如下:


Outer outer = new Outer();
outer.method(); // 输出 "0"

4. 匿名内部类

匿名内部类是没有名字的内部类,只能一次性使用,它通常用于实现接口和抽象类的方法,它的定义方式如下:


public interface MyInterface {
    void method();
}

public class MyClass {
    public void print() {
        MyInterface myInterface = new MyInterface() {
            public void method() {
                System.out.println("Hello World");
            }
        };
        myInterface.method();
    }
}

上面的代码中,MyInterface 是一个接口,MyClass 中 print() 方法中使用了匿名内部类实现了 MyInterface 的 method() 方法。

使用匿名内部类的方式如下:

MyClass myClass = new MyClass();
myClass.print(); // 输出 "Hello World"

以上是几种常见的内部类的定义和使用方式,内部类的使用非常灵活,可以通过内部类实现许多功能,并且它具有访问外部类私有成员的能力,但是由于内部类的存在,代码的可读性和可维护性会相应降低,因此应该谨慎使用。

总结:

内部类的出现进一步扩展了类的功能,使得类的功能更加丰富,内部类的种类繁多,但我们对于这一块只要求掌握就可以了,不必做过深的研究。

如果我的内容对你有帮助,请点赞,评论,收藏创作不易,大家的支持就是我坚持下去的动力!

【从零开始学习JAVA | 第十九篇】初识内部类,【从零开始学习JAVA】,学习文章来源地址https://www.toymoban.com/news/detail-616767.html

到了这里,关于【从零开始学习JAVA | 第十九篇】初识内部类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从零开始学习JAVA | 第十五篇】 多态

    本篇我们来解释一下什么是多态关系,多态关系属于面向对象三大特征的最后一个,可以说面向对象的重点就在多态,因此我们要学好面向对象编程思想,就要学好多态。         Java中的多态是指 同一类对象在不同情况下可能表现出不同的形态和行为。 它包括了 方法重

    2024年02月10日
    浏览(42)
  • 【从零开始学习JAVA | 第十八篇】接口介绍

    目录 前言: 接口: 如何定义一个接口: 如何使用一个接口: 接口中成员的特点: 接口与类的区别:   接口的应用: 总结:         接口其实是为了弥补继承的缺点: 我们无法让父类完美的适应每一个子类的要求 。 例如我们有一个动物类的父类,有一个蝌蚪类,鱼

    2024年02月10日
    浏览(37)
  • 【从零开始学习JAVA | 第三十七篇】初识多线程

    目录 前言: ​编辑 引入: 多线程:         什么是多线程:         多线程的意义:         多线程的应用场景: 总结:                 本章节我们将开始学习多线程,多线程是一个很重要的知识点,他在我们实际开发中应用广泛并且基础,可以说掌握多线程编写程

    2024年02月14日
    浏览(25)
  • 第十九篇 fetch请求

            本篇就开始讲到关于请求的内容了,当然关于 Vue 的大部分还是会想到axios,因为这是官方推荐用的,了解 Vue 的知道在axios之前还有一个vue-resource,后来也由于作者尤雨溪声明vue-resource 已经不维护了,推荐使用这个axios,那么在此之前先来讲在这个fetch,为什么呢?因

    2024年02月09日
    浏览(30)
  • 从零开始学习 Java:简单易懂的入门指南之抽象类&接口&内部类(十一)

    1.1.1 抽象类引入 ​ 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说,父类可能知道子类应该有哪个功能,但是功能具体怎

    2024年02月13日
    浏览(23)
  • 二十三种设计模式第十九篇--命令模式

    命令模式是一种行为设计模式, 它将请求封装成一个独立的对象,从而允许您以参数化的方式将客户端代码与具体实现解耦 。在命令模式中, 命令对象充当调用者和接收者之间的中介 。这使您能够根据需要将请求排队、记录请求日志、撤销操作等。 命令模式的核心组成部

    2024年02月14日
    浏览(28)
  • 【MySQL数据库 | 第十九篇】SQL性能分析工具

    目录   前言: SQL执行频率: 慢查询日志: profile: profile各个指令: 总结:         本篇我们将为大家讲解SQL性能的分析工具,而只有熟练的掌握了性能分析的工具,才可以更好的对SQL语句进行优化。虽然我们在自己练习的时候对这种优化感知并不明显,但是如果我们要

    2024年02月09日
    浏览(35)
  • 从零开始初识机器学习

    本篇文章中我们将对机器学习做全面的了解与介绍,其中第一章 初识机器学习分为上下两个小章节,对机器学习是什么、机器学习由来以及机器学习的理论等展开说明。目的是能让即便完全没接触过机器学习的人也能在短时间对机器学习有一个全面了解。后续将推出机器学习

    2024年02月11日
    浏览(70)
  • 第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR

    OpenCV文字识别与OCR:用于识别图像中的文字内容,并进行光学字符识别。 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理计算机视觉算法。虽然CV 本身并不包含专门的 OCR(Optical Character Recognition,光学字符识别)功能,但可以配合其他

    2024年02月20日
    浏览(37)
  • 九五从零开始的运维之路(其十九)

    本篇将简述的内容:Linux系统下的Tomcat基础 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 Tomcat虚拟主机是通过linux或windows操作系统下进行独立运行的

    2024年02月10日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包