学生视角带你了解Java内部类
作者:笑霸final 发布时间:2022-09-29 17:51:04
一、内部类介绍
1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class)。内部类是类的五大成员之一(属性、 方法、构造器、代码块、内部类)。
分类:
二、成员内部类:
1、非静态内部类
说明:定义在成员位置中(方法或代码块外面),无static修饰。
1.可以直接访问外部类的所有的成员
2.可以 添加任意权限修饰符
3.作用域,和其他成员一样作用在整个外部类
package local_class;
public class localclass {//外部类
//属性位置
private int n1=10;
class localN1{//局部类
public void output(){
//==1==.可以直接访问外部类的所有的成员,包括私有
System.out.println("获取私有成员"+n1);
}
}
//写一个方法来创建局部类的一个实列
public void output(){
localN1 LocalN1 = new localN1();
LocalN1.output();
}
}
实现:
2、静态内部类
**说明:**定义在成员位置中(方法或代码块外面),有或无static修饰。
1.可以直接访问外部类的静态的成员,不能访问非静态成员。
2.可以 添加任意权限修饰符
3.作用域,和其他成员一样作用在整个外部类
代码:
package local_class;
public class _static_localclass {//外部类
private int n1=10;
static int n2=20;
static public class localN2{//静态局部类
public void output(){
//==1==.可以直接访问外部类的所有的成员,包括私有
System.out.println("获取_static_localclass私有成员"+n2);
//System.out.println(n1);
}
}
//写一个方法来创建局部类的一个实列
public void output(){
localN2 LocalN2 = new localN2();
LocalN2.output();
}
}
成员内部类:用法比较简单。
二、局部内部类:
说明:局部类是定义在外部类的方法内或者代码块内。
1.可以直接访问外部类的所有的成员。
2.不能添加访问修饰符,局部内部类的地位就是一个局部变量(所以可以用fianl修饰)。
3.作用域:作用在所定义的方法中或者代码块中。
4.访问方式:局部内部类访问外部外部类成员可以直接访问。外部类访问局部内部类,在外部类作用域内先创建对象再访问。
5.外部其他类不能访问内部类。
6.外部类成员与内部类成员重名时,默认就近原则,如果想用外部类的话可以使用:外部类名.this.成员 。
例如:
2、有名的局部内部类
错误代码
正确代码
package _inner_class;
public class Named_local_inner_class {//外部类
private int a1=1;
int a2=2;
private void fun(){
System.out.println("输出了私有方法");
}
//第一种情况,在方法中
//第二种情况,在代码块中(我就不打代码了和在方法中一样的)
//此处以方法中为例。
public void output(){//方法
class inner_class{//局部内部类
//1.可以访问外部类的所有成员
public void _output(){
System.out.println("a1="+a1);//访问的私有成员
System.out.println("a2="+a2);
fun();
}
}
//只需要实例化就行了,然后调用这个 output()方法。
//注意作用域
inner_class Inner_class=new inner_class();
Inner_class._output();
}//结束方法
}//外部类
调用
1、匿名局部内部类(重要)
1.本质还是一个内部类 就是一个类,该类没有名字(其实有名字,只是我们看不见,系统分配)。
2.同时还是一个对象。 基本语法
new 类名或接口名(参数列表){
类体
};
调用匿名内部类:
输出
和有名的局部内部类的区分
1.A22对象只使用一次,以后不再使用时用匿名局部内部类。
2.A22的编译类型和运行类型是什么?(运行类型其实就是匿名局部内部类,就是XXXXX.外部类名$1)
如图:
最佳实践:当作参数直接传递,简介高效。
来源:https://blog.csdn.net/weixin_52062043/article/details/122567464


猜你喜欢
- IEnumerable这个接口在MSDN上是这么说的,它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代。换句话说,对于所有数组的
- 发送邮件在web开发中,发送邮件是一个很常用的功能,Spring Boot也集成了发送邮件的功能基本使用使用Spring Boot的发送邮件
- 本文主要介绍了SpringBoot配置文件中的明文密码如何加密保存,读取以及对于自定义的加密算法加密的参数如何保存和读取。背景为了安全的需要
- 阅读目录:基础Socket编程多线程并发阻塞式同步IO基础在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践。
- 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输
- 一、概述最近在群里听到各种讨论okhttp的话题,可见okhttp的口碑相当好了。再加上Google貌似在6.0版本里面删除了HttpCli
- ES 简介Elasticsearch 是一个基于 Lucene 实现的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 REST
- 本文实例讲述了C#实现动态加载dll的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Co
- 在 Windows 窗体应用程序中显示图片时要使用图片控件 ( PictureBox ),图片的设置方式与背景图片的设置方式相似。图片控件中
- 什么是Java NIO?同步非阻塞io模式,拿烧开水来说,NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,
- 本文实例讲述了Android手机获取root权限并实现关机重启功能的方法,是Android程序设计中非常常见的重要功能。现分享给大家,供大家
- 前言:回顾上一节服务器配置的内容,我们已经可以自己完成公众号服务器的配置。配置完成之后,我们就可以通过调用的方式,完成对消息管理的处理。当用
- 前言锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。
- Springboot导入本地jar后 打包依赖无法加入1.本地jar包2.pom文件添加自定义jar包导入<!--自定义jar--&g
- 前言在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据。1、首先还是先导包,导入p
- 前言接着上一篇:Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上仓库地址:GitHub仓库查询定义查询请求体pac
- 本文实例总结了Android实现屏幕旋转方法。分享给大家供大家参考。具体如下:在介绍之前,我们需要先了解默认情况下android屏幕旋转的机
- 市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView、Gri
- 问题提出:自己在做一个小网站充当练手,但是前端图片经过base64加密后传往后端在解码。但是一直都有问题,请大神赐教 publi
- 本文实例讲述了Android编程开发之ScrollView嵌套GridView的方法。分享给大家供大家参考,具体如下:前些日子在开发中用到了