Java学习笔记------内部类

类的五大成员

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

内部类

格式:

public class Outer{//外部类

    public class Inner{//内部类

    }

}

public class Test{//外部其他类

    public static void main(String[] args)

}

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

内部类的分类

成员内部类、静态内部类、局部内部类、匿名内部类

成员内部类

格式:

public class Outer{//外部类

    public class Inner{//内部类

    }

}

Inner类即为成员内部类

成员内部类可以被一些修饰符所修饰

获取成员内部类对象

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

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

例如:Outer.inner oi=new Outer().new Inner();

静态内部类

静态内部类即成员内部类用static修饰

静态内部类只能访问外部类中的静态变量和静态方法,如果想访问非静态地需要创建对象

创建静态内部类对象的格式:外部类名.内部类名 对象名 =new 外部类名.内部类名();

调用非静态方法格式:先创建对象,用对象调用

调用静态方法的格式:外部类名.内部类名.方法名();

public class Outer {static class Inner{public void show1(){System.out.println("非静态方法被调用了");}public static void show2(){System.out.println("静态方法被调用了");}}
}
public class test2 {public static void main(String[] args) {//创建对象Outer.Inner oi=new Outer.Inner();//调用非静态方法oi.show1();//调用静态方法Outer.Inner.show2();}
}

局部内部类

将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量

在外界无法直接使用局部内部类,需要在方法内部创建对象并使用

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

如上图, 外界无法调用方法的局部变量

public class Outer2 {int b=10;public void show3(){int a=20;class Inner{String name;int age;public void method(){//访问外部类成员,方法内局部变量System.out.println(a);System.out.println(b);System.out.println("局部内部类method方法调用");}public static void method2(){System.out.println("局部内部类method2静态方法调用");}}//调用局部内部类Inner i=new Inner();System.out.println(i.age);System.out.println(i.name);i.method();Inner.method2();}
}
public class test3 {public static void main(String[] args) {Outer2 o=new Outer2();o.show3();}}

匿名内部类

 格式:

new 类名或者接口名(){

        重写方法;

};

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

使用场景:当方法的参数是接口或者类,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以使用匿名内部类简化代码;

package cn.day1.demo1;public class test {public static void main(String[] args) {new animal(){@Overridepublic void eat() {System.out.println("狗吃骨头");}};method(new animal() {@Overridepublic void eat() {System.out.println("狗吃骨头");}});/** 如果狗类只使用一次,* 不用匿名内部类,实现method需要* 创建对象,再传递给method方法* 测试类中这样实现* dog g=new dog();* method(g);* */}public static void method(animal a){a.eat();}
}

也可以 接口名 对象=new 接口名(){

         重写方法

};

也可以

new 类名或者接口名(){

        重写方法;

}.方法();//调用重写方法

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

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

相关文章

Python时间模块

Python语言的time模块:提供获取操作系统时间的相关命令 时间的表示方法 时间戳 从1970.1.1 0.0.0到当前时间点经历的秒数UTC (世界协调时间) 以英国格林威治这个城市所在的经度点为0时时区,向东或者向西每15度为1个时区&#xf…

数据库设计的三大范式理解与应用

数据库设计的三大范式是关系型数据库设计的基本原则,它们分别是:第一范式(1NF):确保数据库表的每一列都是不可分割的基本数据项,即表中的所有字段值都是不可再分的原子值。这个范式的主要目的是确保每一个字…

【计算机考研】考408,还是不考408性价比高?

首先综合考虑,如果其他科目并不是很优秀,需要我们花一定的时间去复习,408的性价比就不高,各个科目的时间互相挤压,如果备考时间不充裕,考虑其他专业课也未尝不可。 复习408本来就是费力不讨好的事情 不同…

公司项目总结合分享经验

珠海督办 1.批量导入 导入excel表单给接口,接口返回前端想要的数据 list是代表数据的数量,titleMap是代表数据中会有那些字段 listl里面的字段: value是代表要显示的值,success为true代表excel表格的内容填写是正确的&#…

前端布局方式及其优缺点

前端布局方式多种多样,每种布局方式都有其特定的应用场景、特性和优缺点。以下是一些常见的前端布局方式及其特点和优缺点: 静态布局: 特性:元素的尺寸使用绝对单位(如px)进行定义,不会随浏览器…

代码随想录训练营第三十期|第五十三天|动态规划part14|● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp new int[text1.length() 1][text2.length() 1];dp[0][0] 0;for (int i 1; i < text1.length(); i) {ch…

1.5 简述转置卷积的主要思想以及应用场景

1.5 简述转置卷积的主要思想以及应用场景 普通的卷积主要思想&#xff1a; 普通的卷积操作可以形式化为一个矩阵乘法运算&#xff0c;即yAx&#xff08;1-12&#xff09; 其中&#xff0c;x和y分别是卷积的输入和输出(展平成一维向量形式)&#xff0c;维度分别为d⁽i⁾和d⁽…

Linux:kubernetes(k8s)探针ReadinessProbe的使用(9)

本章yaml文件是根据之前文章迭代修改过来的 先将之前的pod删除&#xff0c;然后使用下面这个yaml进行生成pod apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型 metadata: # pod相关的元数据&#xff0c;用于描述pod的数据name: nginx-po # pod名称labels: # pod的标…

第三百八十八回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了DateRangePickerDialog Widget相关的内容,本章回中将介绍Radio Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的Radio Widget是指单选按钮&#xff0c;没有选中时是圆形边框&#x…

Vue+SpringBoot打造超市账单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

王道机试C++第 3 章 排序与查找:排序问题 Day28(含二分查找)

查找 查找是另一类必须掌握的基础算法&#xff0c;它不仅会在机试中直接考查&#xff0c;而且是其他某些算法的基础。之所以将查找和排序放在一起讲&#xff0c;是因为二者有较强的联系。排序的重要意义之一便是帮助人们更加方便地进行查找。如果不对数据进行排序&#xff0c;…

区块链基础知识01

区块链&#xff1a;区块链技术是一种高级数据库机制&#xff0c;允许在企业网络中透明地共享信息。区块链数据库将数据存储在区块中&#xff0c;而数据库则一起链接到一个链条中。数据在时间上是一致的&#xff0c;在没有网络共识的情况下&#xff0c;不能删除或修改链条。 即&…

mysql表数据更新

文章目录 插入数据插入单条数据插入多条数据复制表插入数据 更新数据删除数据截断表 数据库和表创建完成后&#xff0c;应该如何使用呢&#xff1f; 插入数据 插入单条数据 INSERT INTO table_name (column_name1, column_name2, ...) VALUE (value1, value2, ...);插入多条数…

2、函数、对象、对象方法函数的使用、扩展运算符、箭头函数

一、函数 1、数字类型的用法 带Number的先判断是不是数字类型 Number.isNaN() 判断是否 是非数值 非数值返回 true数值类型返回 false console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN(false)); // false console.log(Number.isNaN(null)); // false c…

【uni-app小程序开发】实现一个背景色渐变的滑动条slider

最近做的一个用uni-app+vue2开发的微信小程序项目中要实现一个滑动进度控制条,如下图所示: 1. 滑动条需要渐变背景色 2. 滑块的背景色需要与当前位置滑动条的背景色一致(动态改变) 碰到这样的需求,我当然先是看看官方提供的slider组件和uView里的u-slider组件能不能满足…

Javaweb之Web后端开发总结的详细解析

4. Web后端开发总结 到此基于SpringBoot进行web后端开发的相关知识我们已经学习完毕了。下面我们一起针对这段web课程做一个总结。 我们来回顾一下关于web后端开发&#xff0c;我们都学习了哪些内容&#xff0c;以及每一块知识&#xff0c;具体是属于哪个框架的。 web后端开…

nyist_acm 个人积分赛1(部分题解会补充)

Mirrored String II 看到题解说是马拉车算法&#xff0c;我赛时并没想到&#xff08;好吧其实我是比赛完才知道有马拉车这个算法&#xff09; 因为字符串的长度只有1000&#xff0c;直接暴力跑其实就可以了&#xff0c;但是要注意的是&#xff1b;回文串有俩种形式&#xff0c…

FreeMarker的原理

FreeMarker是一个Java库&#xff0c;用于生成文本输出&#xff08;如HTML网页、电子邮件、配置文件、源代码等&#xff09;&#xff0c;基于模板和传递给模板的数据。它通常被用作Web应用程序的视图层&#xff0c;以生成动态HTML内容。FreeMarker的设计理念是将页面设计&#x…

Jenkins中构建vue项目过程中vite进程被终止(kill),导致vue项目构建失败

jenkins的部分构建日志如下&#xff1a; [33mThe CJS build of Vites Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m 16:37:44 [36mvite v5.0.5 [32mbuilding for production...[36m[39m …

Python学习DAY12_网络应用

网络应用 发送电子邮件 即使在通信软件如此发达的今天&#xff0c;电子邮件仍然是互联网上使用最为广泛的应用之一&#xff0c;公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的&#xff0c;而这些任…