Java基础-内部类

内部类指的是在一个类的内部定义的类,Java 中存在四种内部类,分别是成员内部类、局部内部类、静态内部类和匿名内部类。

成员内部类

成员内部类在类文件中与成员变量和成员方法并列,作为类的成员存在。

成员内部类可以访问外部类的所有成员,成员内部类不可以定义静态成员。

public class Outer {private String a = "a";class Inner {private String b = "b";void hello() {System.out.println(Outer.this.a + " " + b);}}
}

要实例化一个成员内部类,必须先实例化外部类,通过外部类实例实例化一个成员内部类。

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

局部内部类

局部内部类指定义在成员方法或者代码块中的类,对它的访问仅限于定义它的方法或代码块内。

局部内部类可以访问外部类所有成员,如果要访问局部变量,则变量必须被 final 修饰。局部内部类不能定义静态成员。

public class Outer {private String a = "123";public void hello() {final String b = "b";class PartInnerClass{private String c = "c";public void hello() {System.out.println(a + b + c);outerMethod();}}PartInnerClass partInnerClass = new PartInnerClass();partInnerClass.hello();a = "aa";}private void outerMethod(){System.out.println(a);a = "aa";}
}

静态内部类

静态内部类的定义和成员内部类类似,只是比成员内部类多了一个 static 修饰符。

静态内部类不可以访问外部类非静态成员。

public class Outer {private String a = "a";private static String staticA = "a";private void outerMethod(){a = "aa";System.out.println(a);}static class staticInnerClass{private String b = "b";public void innerMethod(){System.out.println(staticA + b);}}
}

静态内部类不再依附于外部类,这点和静态成员有点类似。

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

匿名内部类

匿名内部类在 Java 中用于实现接口和抽象类,它也可以继承普通类,但是很少使用。

匿名内部类可以访问外部类的所有成员。匿名内部类如果要访问局部变量,则该局部变量必须被 final 修饰。

匿名内部类不能定义静态成员。

public class Outer {private String a = "a";private void outerMethod(){String c = "c";Runnable r = new Runnable() {private String b = "b";@Overridepublic void run() {System.out.println(a + b + c);}};r.run();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟化技术及实时虚拟化概述

版权声明:本文为本文为博主原创文章,未经本人同意,禁止转载。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/ 文章目录 一、前言二、分时系统三、虚拟化介绍四、虚拟化实现方式及分类模拟器Type2虚拟化…

欧姆龙PLC联网

一、设备信息确认 左上角的为PLC型号,如图该PLC型号为CP1H,不同型号的欧姆龙PLC通讯方面有什么差别呢? 通讯能力和方式不同: 有些型号PLC自带网口,有些则需要扩展(上图中右侧的两个红框内为后扩展的通讯口,扩展模块可以随意组合双网口,双232串口,双485串口都可以)…

JDBC编程连接MySQL数据库遇到的两个错误

在进行java与MySQL数据库进行连接的时候我遇到了两个报错,在一开始的时候遇到的报错是Access denied for user yulinlocalhost (using password: YES),此时我在网络上搜索发现是密码出现错误的问题(出现该问题确实是密码错误)&…

【DevOps】Atlassian插件开发指南

本文以Bamboo插件开发为例,记录一下插件开发过程。 一、简介 Atlassian Bamboo 6.9.1 是一款持续集成和持续交付(CI/CD)工具,支持使用插件扩展其功能。如果需要开发自己的 Bamboo 插件并添加到 Bamboo 中,则可以参考…

设计模式——享元模式

享元模式 定义 享元模式(Flyweight Pattern)是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优缺点、应用场景 优点 可以大大减少应用程序创建对象的数量,降低程序内存占用。 缺点 提高了系统的复杂度&…

spring-IOC

IOC容器 简介 IoC(Inversion of Control)控制反转,是一种基于面向对象编程法则的设计思想,它设计出的程序具有松耦合、更优良的特点。 IoC容器是Spring框架中重要的核心组件之一,贯穿了Spring从出生到成长的整个过程,Spring通过I…

零基础学习,轻松打造物业服务小程序

现如今,物业服务已经成为了人们生活中不可或缺的一部分。为了更好地满足人们对物业服务的需求,许多企业和个人开始开发物业服务小程序,以便提供更加便捷和高效的服务。然而,对于大多数人来说,搭建一个小程序可能需要一…

智能ai绘画软件帮你用科技点亮创意火花

李明:嘿,你听说过ai绘画软件吗?我最近对数字艺术产生了浓厚的兴趣 王磊:当然!ai绘画软件真是太神奇了!它可以将抽象的文字描述转换成惊人的艺术作品。 李明:是吗?它们绘制的效果怎…

数据库及数据表的相关操作(一)

目录 概念知识一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 概念知识 关系型数据库: 使用了关系模型的数据库系统&…

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

MySQL-DQL-聚合函数

目录 聚合函数 注意事项 聚合函数 介绍:将表中的数据作为一个整体,进行纵向计算语法:select 聚合函数(字段列表) from 表名SUM 求和COUNT 统计数量 具体代码 -- 1.统计该企业员工数量--count -- count(字段) select c…

React Native使用本地修改的三方源码

在 React Native 中,你可以使用本地代码而不是使用第三方库的源码来编译你的应用程序。以下是一般的步骤: 在你的项目目录中创建一个名为overrides(或其他适合你的名称)的文件夹。 将修复后的 react-native-wheel-pick 源码复制…

Linux内核源代码的目录结构包括部分:

内核核心代码:这部分代码包括内核的各个子系统和模块,如进程管理、内存管理、文件系统、网络协议栈等。这些代码构成了Linux内核的核心功能。 非核心代码:除了核心代码之外,还包括一些非核心的代码和文件,如库文件、固…

uniapp 在app和小程序端使用webview进行数据交互

结论&#xff1a;app端支持比较好可以做到实时传递&#xff0c;微信小程序支持比较差&#xff0c;小程序向url传参只能通过url&#xff0c;url向app传参需要特定时机(后退、组件销毁、分享、复制链接)触发才能收到消息。 以下是代码 app端(需要使用nvue) <template> <…

和chatgpt学架构03-引入UI框架(elment-plus)

目录 1 项目目录及文件的具体作用1.1 App.vue1.2 main.js的作用1.3 main.js什么时候被调用1.4 npm run serve干了什么事情1.5 package.json的作用 2 安装UI框架2.1 安装命令2.2 全局引入 3 启动工程总结 我们已经安装好了我们的vue脚手架&#xff0c;用vscode打开工程目录 要自…

【FPGA】基于C5的第一个SoC工程

文章目录 前言SoC的Linux系统搭建 前言 本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明&#xff1a;本文仅作记录和操作指南&#xff0c;涉及到的操作会尽量细致&#xff0c;但是由于文件过大不会分享文件&#xff0c;具体软件可以自行搜…

Leetcode-每日一题【109.有序链表转换二叉搜索树】

题目 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: head [-10,-3,0,5,9]输出: [0,-3,9,-…

VS报错E1696 无法打开类似于stdio.h等头文件的解决办法

VS报错E1696 无法打开类似于stdio.h等头文件的解决办法 我的VS版本是2022的&#xff0c;然后我今天把同事在VS2017上的code&#xff08;一个完整的解决方案&#xff09;从svn上拿过来。结果发现&#xff0c;一大堆E1696的错误。主要表现就是项目中include的一些常用的c语言基础…

算法竞赛字符串常用操作大全

算法竞赛字符串常用操作总结来啦~ &#x1f44a; 大家好 我是寸铁&#x1f4aa; 考前需要刷大量真题,大家一起相互监督&#xff0c;每日做N题&#xff0c;一起上岸吧✌️ ~ 冲刺蓝桥杯省一模板大全来啦 &#x1f4a5; ~ 蓝桥杯4月8号就要开始了 &#x1f64f; ~ 还没背熟模…

字幕切分视频

Whisper 仓库地址&#xff1a; https://github.com/openai/whisper 可用模型信息&#xff1a; 测试视频&#xff1a;18段&#xff0c;总共447S视频&#xff08;11段前&#xff1a;有11段开头有停顿的视频&#xff09; Tiny: 跑完&#xff1a;142S &#xff0c;11段前&#xf…