内部类(InnerClass) 总结

类的成员之五:内部类1. 什么是内部类?
将一个类A定义在另一个类B里面,里面的那个类A就称为`内部类(InnerClass)`,类B则称为`外部类(OuterClass)`。
内部只供外部类使用
2. 为什么需要内部类?
具体来说,当一个事物A的内部,还有一个部分需要一个完整的结构B进行描述,而这个内部的完整的结构B又只为外部事物A
提供服务,不在其他地方单独使用,那么整个内部的完整结构B最好使用内部类。总的来说,遵循`高内聚、低耦合`的面向对象开发原则。3. 内部类使用举例:
Thread类内部声明了State类,表示线程的生命周期
HashMap类中声明了Node类,表示封装的key和value4. 内部类的分类:(参考变量的分类)> 成员内部类:直接声明在外部类的里面。> 使用static修饰的:静态的成员内部类> 不使用static修饰的:非静态的成员内部类> 局部内部类:声明在方法内、构造器内、代码块内的内部类> 匿名的局部内部类> 非匿名的局部内部类5. 内部类这节要讲的知识:> 成员内部类的理解> 如何创建成员内部类的实例> 如何在成员内部类中调用外部类的结构> 局部内部类的基本使用6. 关于成员内部类的理解:> 从类的角度看:- 内部可以声明属性、方法、构造器、代码块、内部类等结构- 此内部类可以声明父类,可以实现接口- 可以使用final修饰- 可以使用abstract修饰> 从外部类的成员的角度看:- 在内部可以调用外部类的结构。比如:属性、方法等- 除了使用public、缺省权限修饰之外,还可以使用private、protected修饰- 可以使用static修饰7. 关于局部内部类的说明:代码
package chapter08_oop3_teacher.src.com.atguigu09.inner;/*** ClassName: OuterClassTest* Description:** @Author 尚硅谷-宋红康* @Create 10:31* @Version 1.0*/
public class OuterClassTest {public static void main(String[] args) {//1. 创建Person的静态的成员内部类的实例Person.Dog dog = new Person.Dog();dog.eat();//2. 创建Person的非静态的成员内部类的实例
//        Person.Bird bird = new Person.Bird(); //报错Person p1 = new Person();Person.Bird bird = p1.new Bird();//正确的bird.eat();bird.show("黄鹂");bird.show1();}}class Person{ //外部类String name = "Tom";int age = 1;//静态的成员内部类static class Dog{public void eat(){System.out.println("狗吃骨头");}}//非静态的成员内部类class Bird{String name = "啄木鸟";public void eat(){System.out.println("鸟吃虫子");}public void show(String name){System.out.println("age = " + age);//省略了Person.thisSystem.out.println("name = " + name);System.out.println("name = " + this.name);System.out.println("name = " + Person.this.name);}public void show1(){eat();this.eat();Person.this.eat();}}public void eat(){System.out.println("人吃饭");}public void method(){//局部内部类class InnerClass1{}}public Person(){//局部内部类class InnerClass1{}}{//局部内部类class InnerClass1{}}}

package chapter08_oop3_teacher.src.com.atguigu09.inner;/*** ClassName: OuterClassTest1* Description:** @Author 尚硅谷-宋红康* @Create 10:55* @Version 1.0*/
public class OuterClassTest1 {//说明:局部内部类的使用public void method1(){//局部内部类class A{//可以声明属性、方法等}}//开发中的场景public Comparable getInstance(){//提供了实现了Comparable接口的类//方式1:提供了接口的实现类的对象
//        class MyComparable implements Comparable{//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        }
//
//        MyComparable m = new MyComparable();
//        return m;//方式2:提供了接口的实现类的匿名对象
//        class MyComparable implements Comparable{
//
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        }
//
//        return new MyComparable();//方式3:提供了接口的匿名实现类的对象
//        Comparable c = new Comparable(){
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        };
//        return c;//方式4:提供了接口的匿名实现类的匿名对象return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};}}

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

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

相关文章

富格林:正规思路实现得益出金

富格林悉知,随着金融市场的不断发展,黄金作为一种正规投资品种被越来越多投资者认识,在黄金投资市场中,有各种各样复杂的信息,投资者要懂得明辨是非,树立正规做单思路避免受害亏损。以下也为大家总结几点正…

STM32为什么不能跑Linux?

STM32是一系列基于ARM Cortex-M微控制器的产品,它们主要用于嵌入式系统中。而Linux则是一个开源的类Unix操作系统,主要面向的是桌面电脑、服务器等资源丰富的计算机。虽然理论上可以将Linux移植到STM32上运行,但是由于两者之间存在着很多技术…

vivado 配置存储器器件编程2

为双 QSPI (x8) 器件创建配置存储器文件 您可使用 write_cfgmem Tcl 命令来为双 QSPI (x8) 器件生成 .mcs 镜像。此命令会将配置数据自动拆分为 2 个独立 的 .mcs 文件。 注释 : 为 SPIx8 生成 .mcs 时指定的大小即为这 2 个四通道闪存器件的总大小。…

QA测试开发工程师面试题满分问答5: 内存溢出和内存泄漏问题

概念阐述 内存溢出(Memory Overflow)和内存泄漏(Memory Leak)是与计算机程序中的内存管理相关的问题,它们描述了不同的情况。 内存溢出是指程序在申请内存时,要求的内存超出了系统所能提供的可用内存资源…

SSM框架学习——Eclipse创建Spring MVC maven项目

Spring MVC项目创建 什么是Spring MVC Spring MVC是Spring内置的,实现了Web MVC设计模式的框架。 它解决了Web开发过程中很多的问题,例如参数接收、表单验证等。另外它采用松散耦合可插拔组件等结构,具有相对较高的灵活性和扩展性。 Spri…

vue创建项目下载动态路由v-for mounted websocket :style :class store使用说明

在Vue中创建一个项目,并整合动态路由、v-for、mounted生命周期钩子、WebSocket、:style、:class以及Vuex的store,涉及到多个Vue核心特性的使用。下面我将简要说明如何逐步整合这些特性。 1. 创建Vue项目 使用Vue CLI创建项目: 2. 配置动态路…

html怎么实现axios发请求,并且实现跨域

方案是代理服务器 前端处理 一、下包 save是开发环境的意思 可以单独弄个server文件夹或者其他也行 npm install express --savenpm install http-proxy-middleware --save二、准备proxy-server.js文件 const express = require(express) const {createProxyMiddleware } = r…

C++ 类(初篇)

类的引入 C语言中,结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。 而为了区分C和C我们将结构体重新命名成class去定义 类的定义 标准格式: class className {// 类体:由成员函…

【计算机网络】epoll

IO多路转接 - epoll 一、I/O多路转接之 epoll1. epoll 接口(1)epoll_create()(2)epoll_wait()(3)epoll_ctl() 2. epoll 原理3. epoll 的优点4. epoll 的使用5. epoll 的工作模式(1)水…

实验四 Java图形界面与事件处理(头歌)

实验四 Java图形界面与事件处理(头歌) 制作不易!点个关注!给大家带来更多的价值! 目录 实验四 Java图形界面与事件处理(头歌) 制作不易!点个关注!给大家带来更多的价值!代码如下: 代码如下&…

platformio创建项目卡死问题(ctl解决)

vscode上安装完platformio后,创建一个新项目,始终在转圈,查阅官网文档后发现可以使用ctl在终端中创建项目,本文方案的前提是终端走了代理。 根据官网命令安装ctl: curl -fsSL -o get-platformio.py https://raw.gith…

case语句

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 CASE 语句的执行方式与 IF...THEN...ELSIF 语句的执行方式类似,但是它是通过一个表达式的值来决定执行哪个分支 CASE 选择器表达式 WHEN 条件 1 THEN 语句序列 …

2024.03.23校招 实习 内推 面经

绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招 | 元戎启行 2024春招(内推) 校招 | 元戎启行 2024春招(内推) 2、校招 | 博雅工道机器人 2024春季校园招聘开始了! 校招…

内网穿透实践

一、使用介绍 由于绝大部份人的网络都是处在内网之中,这导致你在本地电脑上写的一些web服务器(又或者其它网络相关的功能),都是无法将链接发给别人使用查看的。 并且由于大部分人采用的方案也都是在本地进行测试开发&#xff0c…

dotnet依赖注入与IOC(包含Autofac的使用)

文章目录 依赖注入与IOCIOC依赖注入DIAutofac轻量容器的使用 依赖注入与IOC IOC IOC 是 Inversion of Control(控制反转)的缩写。在软件开发中,IOC 是一种设计模式,它改变了传统的程序设计流程,使得对象之间的依赖关系…

redis数据结构基础介绍

Redis 是一种开源的、内存中的数据结构服务器,它支持多种类型的数据结构。以下是 Redis 支持的主要数据结构: 字符串(String): 这是最简单的类型,一个键对应一个值,是二进制安全的。这意味着 Re…

Linux: linux常见操作指令

目录 01.ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要) 06.rmdir指令 && rm 指令(重要) 07.man指令(重要) 07.cp指令(重要) 08.mv指令&#…

H.264 压缩与编解码原理

H.264 压缩与编解码原理 H.264 压缩与编解码原理H.264 简介视频编码的总体思路H.264 压缩技术帧内预测压缩什么是空间冗余?具体预测方法 帧间预测压缩什么是时间冗余?具体预测方法:运动估计 概念:Group of Pictures(GO…

java-网络编程socket-聊天室-先导

这边我会简单介绍一下聊天室的组成部分,和思路的引导 涉及知识点 java 中异常处理机制 和 io流和网络编程socket 简单回顾异常机制 Java中的异常机制是一种用于处理程序运行期间出现的错误或异常情况的机制。这种机制允许程序员定义在特定情况下可能发生的错误,并…

mysql慢sql排查与分析

当MySQL遇到慢查询(慢SQL)时,我们可以通过以下步骤进行排查和优化: 标题开启慢查询日志: 确保MySQL的慢查询日志已经开启。通过查看slow_query_log和slow_query_log_file变量来确认。 如果没有开启,可以…