java内部类小结

【README】

1,本文总结了java4种内部类,包括

  • 成员内部类:在外部类内部定义的非静态类;成员内部类不能独立存在,如 UML中类间的组合关联关系
  • 静态内部类:在外部类内部定义的静态类;静态类与外部类关系密切,但可以独立存在,如UML中类间的聚合关联关系
  • 局部内部类:在方法内部定义的内部类;其作用域在方法内部;
  • 匿名内部类:顾名思义,没有名字的内部类,通常用于实现接口,没有自定义构造器;;

2,本文给出了 相关的测试用例;

3,内部类的作用

  • 1,内部类有自己的实现,有助于外部类实现多继承;1个外部类里面定义多个内部类,每个内部类继承一个父类,就变相实现了多继承;
  • 2,提高代码内聚程度;

【1】内部类介绍

【1.1】成员内部类

1)成员内部类:在外部类内部定义的非静态类;成员内部类不能独立存在;

2)代码结构

/*** @Description 成员内部类* @author xiao tang* @version 1.0.0* @createTime 2021年11月21日*/
public class Topic78 {private String name;public Topic78(String name) {this.name = name;}// 成员内部类public class MemberInnerClass {private int age;public MemberInnerClass(int age) {this.age = age;}// 在外部类定义内部,使用外部类.this指针 指向对外部类对象的引用public String hello() {return "hello " + Topic78.this.name;}}
}

3)测试用例

public class MemberInnerClassTest {public static void main(String[] args) {Topic78 topic78 = new Topic78("lisi");// 创建成员内部类// 在外部类定义外部,使用外部类对象.new指针 指向对外部类对象的引用Topic78.MemberInnerClass memberInnerClass = topic78.new MemberInnerClass(18);System.out.println(memberInnerClass.hello()); // hello lisi}
}

注意: 成员内部类使用到了 外部类对象.new 和 外部类.this 两个指针

  1. 外部类对象.new 指针:指向对外部类对象的引用; (创建内部类对象时使用)
  2. 外部类.this 指针:指向对外部类对象的引用;(在内部类使用外部类对象的属性时使用)

【1.2】静态内部类

1)定义:静态内部类,在外部类内部定义的静态类;静态类与外部类关系密切,但可以独立存在,如UML中的聚合;

2)代码结构

/*** @Description 静态内部类* @author xiao tang* @version 1.0.0* @createTime 2021年11月21日*/
public class Topic77 {/*** @description 静态内部类* @author xiao tang* @date 2021/11/21*/public static class StaticInnerClass {String name;public StaticInnerClass(String name) {this.name = name;}public void sayHello() {System.out.println("hello " + name);}}
}

3)测试用例:;

/*** @Description TODO* @author xiao tang* @version 1.0.0* @createTime 2021年11月21日*/
public class StaticInnerClassTest {public static void main(String[] args) {Topic77.StaticInnerClass staticInnerClass = new Topic77.StaticInnerClass("zhangsan");staticInnerClass.sayHello();  // hello zhangsan}
}

【1.3】局部内部类

1)定义:局部内部类, 在方法内部定义的内部类

  • 其作用域:是当前方法块,以及访问外部类的所有成员;但无法在当前方法之外定义和使用它;

2)代码结构

/*** @Description 局部内部类* @author xiao tang* @version 1.0.0* @createTime 2021年11月21日*/
public class LocalInnerClassTest {private String name;public LocalInnerClassTest(String name) {this.name = name;}public void sayHello() {// 在方法内部定义局部内部类// 其作用域:是当前方法块,以及访问外部类的所有成员;(无法在当前方法之外定义和使用它)class LocalInnerClass {public String hello() {return "hello " + name;}public String nice2MeetYou() {return "nice to meet you";}}LocalInnerClass localInnerClass = new LocalInnerClass();System.out.println(localInnerClass.hello());System.out.println(localInnerClass.nice2MeetYou());}public static void main(String[] args) {new LocalInnerClassTest("lisi").sayHello();}
}

3)测试用例:

同上;

hello lisi
nice to meet you


【1.4】 匿名内部类

1)定义:匿名内部类,顾名思义,没有名字的内部类,通常用于实现接口,没有自定义构造器;

2)代码结构: 并发编程实现Runnable接口

/*** @Description 匿名内部类* @author xiao tang* @version 1.0.0* @createTime 2021年11月21日*/
public class AnonymousInnerClassTest {public static void main(String[] args) {// 通过匿名内部类实现 Runnable接口,简化代码Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("hello world");}};runnable.run();}
}

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

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

相关文章

python内置模块有哪些_python中那些小众但有用的内置模块

今天带来的是python里一些小众但是却比较实用的python库,一起来看看吧!pprint:更清晰的打印pprint 是 pretty printer 的缩写,用来打印 Python 数据结构,与 print 相比,它打印出来的结构更加整齐&#xff0…

微软想让你跟机器人说句话就把事办了

也别猜错,微软可没有像 Google 一样打算让四只脚能跑 60 迈和两只脚能穿行森林的机器人大军占领你的家。他们家的机器人不是 Robot,而叫 Bot,可能是 chatbot 的简称,也就是聊天机器人。 具体来说,微软在自然语言处理的…

转:Spring Boot 获取 HttpServletRequest 的方法

转自: Spring Boot 获取 HttpServletRequest 的方法 - 简书本文介绍 Spring Boot 2 获取 HttpServletRequest 的方法。 目录 概述 方法Controller 方法参数属性自动注入手动方法调用借助 Mo...https://www.jianshu.com/p/b7a7d66c4ef2 本文介绍 Spring Boot 2 获取…

前端面试常考系列四

转载自 前端面试常考系列四 一、CSS盒子模型有哪些用处 css中的盒子模型是为了理解divcss模型的定位功能,它利用盒子模型这样的布局方式代替了传统的表格布局方式。盒子模型是在学习divcss布局方式中必须要学习的一个模型,通过这个模型可以明白网页中di…

python线性加权模型_局部加权之线性回归(1) - Python实现

1 #局部加权线性回归2 #交叉验证计算泛化误差最小点345 importnumpy6 from matplotlib importpyplot as plt789 #待拟合不含噪声之目标函数10 deforiFunc(x):11 y numpy.exp(-x) * numpy.sin(10*x)12 returny13 #待拟合包含噪声之目标函数14 def traFunc(x, sigma0.03):15 y …

3分钟看完 Day2 Keynote

hey~ M姐又给大家带来了满满惊喜的 Build2016 Day 2 Keynote 干货汇总了。 如果你连昨天的都还不知道,那真心就 out 了。如果说信仰在昨天充值爆棚,今天就要充值信仰到掀翻房顶的节奏了!!! 红衣主教今天妥妥变身成为新…

latex 数学公式_技能分享——LaTeX篇I

公众号文章系列二——“小袁技能分享”上线啦,第一篇推文我们聊一聊LaTeX(音译 “拉泰赫”)Question 1什么是LaTeX?要解释LaTeX是什么,我们先要了解另外一个事物:TeX。1968年,美国著名计算机科学家、现代计算机科学的先…

转:springboot servlet使用配置

转自: springboot servlet使用配置_奔跑的蜗牛的博客-CSDN博客在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。 一、代码注册通过ServletRegistrationBean 获得控制。 也…

前端面试常考系列五

转载自 前端面试常考五 一、DIV元素是什么 DIV元素是用来为HTML文档内大块(block-level)的内容提供结构和背景的元素。DIV的起始标签和结束标签之间的所有内容都是用来构成这个块的,其中所包含元素的特性由DIV标签的属性来控制,或…

从业十余年谈谈对dotnet看法与坚持

前言 园子经常在讨论关于.Net发展的问题,我也这些年在工作乃至创业过程中使用.Net碰到的一些问题和看法。个人擅长的技术面,C/C/MFC/STL、ASM、JAVA、VB、Javascript/Typescript、C#/WebForm/MVC、Android/MonoDroid,Linux/Windows,还有没有可…

kali安装python3.7_Debian服务器之安装Python3.7

1、系统环境介绍1.1 系统版本debian-9.6.0-amd64-netinst1.2 系统内核Linux lnnkee 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux2、下载安装包https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz3、配置安装环境apt install libffi-dev …

org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法

【README】 本文po出了 topic not present in metadata 的解决方法; 很多博文说是 因为 jackson-databind 没有引入,但是我重新引入后,还是没有解决问题; 最后,原因在于我要发送消息的分区,topic 没有对…

前端面试常考系列六

转载自 前端面试常考系列六 一、为什么重置浏览器默认样式,如何重置 每种浏览器都有一套默认的样式表,即user agent stylesheet,网页在没有指定的样式时,按浏览器内置的样式表来渲染。这是合理的,像word中也有一些预留…

Microsoft将Linux带至桌面操作系统

在今天的Build大会上Microsoft宣布:今年的Windows 10年度更新将使得Windows 10系统能够无缝运行Linux二进制程序。多年来,专家与开发者都在猜测,Linux如何以及何时才能在普通PC用户的桌面系统中更加流行。从今天的新闻来看,似乎Mi…

kafka控制器,复制与存储小结

【README】 1,本文主要总结kafka复制,存储细节;2,本文的kafka集群版本是3.0.0, 有3个broker,分别是 centos201, centos202, centos203 对应的brokerid为 1, 2, 3 ;【1】kafka内部原…

python开发stm32软件_ADB+Python+STM32 实现 微信跳一跳辅助

说明:安卓手机开启USB调试模式,具体如何开启,百度自己手机即可安装ADB工具安装python2.7步骤:1、安装adb工具下载地址:https://download.csdn.net/download/qq_29769263/10420731下载后解压到便于记忆的地方即可,以解压…

不装mono,你的.NET程序照样可以在Linux上运行

让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序。 这种运行.net程序的办法有两个弱点,一个是需要客户机安装mono,二个是 ”mono xx.exe“ 这种命令行总让人感到有点…

JAVA面试常考系列一

转载自 JAVA面试常考系列一 题目一 什么是Java虚拟机?为什么Java被称为平台无关的编程语言? java虚拟机是一个可以执行字节码文件(.class)的虚拟机进程。 为什么java与平台无关呢?因为java源程序(.java&…

转:运维监控系统-监控项及指标的梳理

转自: 运维监控系统-监控项及指标的梳理_程序员杂谈-CSDN博客_运维监控指标综合监控功能工具 综合监控工具完成对被管对象的集中监控、集中维护和集中管理,被管对象包括网络设备、服务器、PC设备、数据库、中间件、存储、备份、安全设备、应用系统等。工…

圆心角 圆弧上点坐标_数控加工中心CNC的G02/G03圆弧指令的I、J、与R的区别

G02:顺(CW)圆弧插补G03:逆(CCW)圆弧插补根据所选择的X、Y平面,指令格式如下两种:G17 G02/G03 X_ Y_ I_ J_ F_;G17 G02/G03 X_ Y_ R_ F_;定义方式:依右手坐标系统&#xf…