首页 > 编程语言 >Java 五种内部类演示及底层原理详解

Java 五种内部类演示及底层原理详解

时间:2024-05-30 12:03:19浏览次数:28  
标签:部类 演示 内部 对象 创建对象 接口 详解 Java 方法

内部类

什么是内部类

在A类的内部定义B类,B类就被称为内部类

发动机类单独存在没有意义 发动机为独立个体

可以在外部其他类里创建内部类的对象去调用方法

类的五大成员

属性 方法 构造方法 代码块 内部类

内部类的访问特点

内部类可以直接访问外部类的成员,包括私有

外部类要访问内部类的成员,必须创建对象

访问特点原因

如果在测试类中调用show方法 必须先创建对象

然后给对象的属性赋值

当当前方法被调用时

java虚拟机会把调用方法者的地址值传递给this

所以在代码中打印 时 打印调用者的信息

不然就找不到了 找不到对象

ArrayList类源代码

ArrayList类 集合类

集合存储数据

通过遍历可以获得数据

ArrayListL里有个内部类叫迭代器Itr

对于集合类来说相对独立,而又属于集合,所以设为内部类

对内部类总结

1.什么是内部类

写在一个类里面的类叫做内部类

2.什么时候用到内部类

B类表示的事物是A类的一部分,且B单独存在没有意义

比如汽车的发动机 ArrayList类的迭代器 人的心脏

内部类的种类

成员内部类

了解

写在成员位置 属于外部类的成员

成员内部类代码如何书写

如果用private私有修饰内部类对象

那只能在外部类中创建对象

private修饰符 只能在本外部类中使用

默认权限可以只在本包中使用

protected修饰符 可以在本包中的其他类中使用 可以在其他包的子类也可以用

外面的孩子也是受保护的

public修饰符 公共的 随处都可以创建对象

如何创建成员内部类的对象

方法1: 直接创建格式 外部类名.内部类名 对象名=外部类对象.内部类对象

成员内部类实际上和成员变量 成员方法本质是一样的

通过创建对象去调用 注意使用链式编程

方式2:在外部类中编写方法 对外提供内部类的对象

通过在外部类编写 getInstance方法 获得被private修饰的内部类方法

测试类接收方法

两种方式

1.用父类接收 形成多态

2.直接获取对象

面试题

内存图

在堆内存里外部类对象先加载进去 再加载内部类对象 开辟新空间

java会给内部类对象一个隐藏的this变量用来记录外部类的地址值

总结

静态内部类

静态内部类只能访问外部类中的静态变量和静态方法

如果想要访问非静态的需要创建对象

只要是静态的东西都可以用类名.直接使用

调用非静态内部类中的方法

调用静态内部类中的方法

总结

特殊的成员内部类 静态内部类

创建静态内部类对象的方式 Outer.inner.oi=new Outer.Inner();

如何调用静态内部类中的方法

局部内部类

了解即可

将内部类定义在方法里面

类似于方法里的局部变量

外部是无法直接使用的 需要在方法内部创建对象并使用

该类可以直接访问外部类的成员 也可以访问方法内的局部变量

匿名内部类

相对最重要的

匿名内部类本质上是隐藏了名字的内部类

书写格式

如下图

匿名内部类实质上是swim类接口的实现类

student类实现swim类接口

重写swim类中的抽象方法

实现后 上去名字

swim后花括号里的内容即为swim接口的实现类

先把前面的class去掉 剩下的内容就是一个没有名字的类

表示这个没有名字的类实现的swim类的接口 所以要在类中重写接口中所有的抽象方法

如何创建没有名字类的对象

创建对象 new 类名();

即把new方法放到swim前面 再在后面加上()表示用空参构造构建

new是创建花括号里没有名字类的对象

匿名内部类实际上是对象 整体是一个对象 即为匿名内部类的对象

中间的格式

继承关系

花括号里的内容是animal的子类

等号左右是接口 右边是接口实现类对象

形成接口多态

并且

总结

匿名内部类是隐藏了名字的内部类

可以写在成员位置 也可以写在局部位置

格式:

new 类名或者接口名(){

重写方法

}

包括继承或实现,方法的重写,创建对象

整体就是一个类的子类对象或者接口的实现类对象

使用场景

当方法的参数是接口或者类时

以接口为例,可以传递这个接口的实现类对象

如果实现类只使用一次,可以用匿名内部类来简化代码

标签:部类,演示,内部,对象,创建对象,接口,详解,Java,方法
From: https://blog.csdn.net/qq_30500575/article/details/139264104

相关文章

  • java+sql企业固定资产管理系统
    摘要:本文主要介绍的是固定资产管理系统的整个设计过程。第1章的绪论包括选题的背景,目的和意义,国内外现状;第2章平台简介包括JBuilder2005和SQLServer数据库的介绍;第3章系统分析,需求分析,数据流与数据字典,功能需求;第4章系统设计部分包括系统总体设计,功能模块设计,数据库设计;第5章......
  • 三维前端开发项目中Threejs的THREEScene函数详解
    THREE.Scene函数用于创建一个场景对象。大家好!艾斯视觉作为在IT行业中负责ui设计和前端开发环节的服务商很高兴能在这里与大家共同探讨学习:场景是Three.js中所有图形元素的容器,它可以包含相机、光源、几何体、材质等。创建场景对象的基本语法如下:constscene=newTHREE.S......
  • 使用Java API 操作MongoDB
    除了通过启动mongo进程进入Shell环境访问数据库外,MongoDB还提供了其他基于编程语言的数据库访问方法。MongoDB官方提供了编程语言的驱动包,利用这些驱动包可以使用编程方法连接并操作MongoDB数据库。想要使用 Java程序操作 MongoDB,需要确保您的电脑上已经安装了Mong......
  • 为何Java抽象类是代码架构的基石?
    效率工具推荐一个程序员的常用工具网站,效率加倍嘎嘎好用:程序员常用工具云服务器云服务器限时免费领:轻量服务器2核4G腾讯云:2核2G4M云服务器新老同享99元/年,续费同价阿里云:2核2G3M的ECS服务器只需99元/年,续费同价为何Java抽象类是代码架构的基石?Java抽象类是面向对象编......
  • MySQL查询详解:单表查询、多表查询、分组查询、子查询
    效率工具推荐一个程序员的常用工具网站,效率加倍嘎嘎好用:程序员常用工具云服务器云服务器限时免费领:轻量服务器2核4G腾讯云:2核2G4M云服务器新老同享99元/年,续费同价阿里云:2核2G3M的ECS服务器只需99元/年,续费同价MySQL查询详解:单表查询、多表查询、分组查询、子查询在......
  • Java毕业设计-基于springboot开发的旅游网站-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、用户信息管理2、旅游动态管理3、景点信息管理4、公告信息管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的旅游网站-......
  • Java开发工具|推荐收藏
    Java是一种广泛使用的编程语言,拥有多种开发工具,包括集成开发环境(IDE)和代码编辑器。以下是几种常见的Java开发工具以及它们的比较:Eclipse是一款流行的开源IDE,广泛用于Java开发。它具有强大的代码编辑、调试和性能分析功能,支持插件扩展,可以满足不同开发需求。Eclipse......
  • java泛型基础
    ​ 一、泛型介绍: JDK5除了推出foreach新循环,还推出了一个新特性:泛型泛型作用:在一个类或接口的声明处指定该类中某个属性的类型。或声明方法返回值的类型或方法参数的类型  泛型也称为参数化类型。它允许我们在一个类或接口的声明处指定该类中某个属性的类型或  ......
  • dubbo~javax.validation和jakarta.validation的介绍与排雷
    javax.validation和jakarta.validation都是用于Java中进行数据验证(validation)的相关API,它们提供了一套标准的验证框架,用于验证Java对象的属性是否符合指定的约束条件。这两个API的作用类似,只是在JavaEE平台的演进过程中发生了一些变化。javax.validation:javax.validation是最......
  • 给师妹写的《Java并发编程之线程池十八问》被表扬啦!
    写在开头  之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下!Java并发编程之线程池十八问  经过之前......