Java之内部类

一、内部类的概念

从语法上来说,一个 定义在另一个 中或者这个 中一个方法的内部,那么把这个 叫做内部类,另一个 叫做外部类。
public class A{
class B{
}

 public void C(){
class C{
}
}

}
//A是外部类
//B、C是内部类
内部类和外部类共用同一个 java 源文件,但是经过编译之后,内部类会形成单独的字节码文件

二、内部类的分类

在外部类中,定义位置与外部类成员所处的位置相同,称为成员内部类。局部内部类可以直接访问。
在外部类的一个方法内部定义的,称为局部内部类。只局部内部类能在该方法内部使用(实例化)。

1.实例内部类

即未被 static 修饰的成员内部类
public class OutClass {
private int a;
static int b;
int c;
public void methodA(){
a = 10;
System.out.println(a);
}
public static void methodB(){
System.out.println(b);
}
// 实例内部类:未被static修饰
class InnerClass{
int c;
public void methodInner(){
// 在实例内部类中可以直接访问外部类中:任意访问限定符修饰的成员
a = 100;
b =200;
methodA();
methodB();
// 如果外部类和实例内部类中具有相同名称成员时,优先访问的是内部类自己的
c = 300;
System.out.println(c);
// 如果要访问外部类同名成员时候,必须:外部类名称.this.同名成员名字
OutClass.this.c = 400;
System.out.println(OutClass.this.c);
}
}
public static void main(String[] args) {
// 外部类:对象创建 以及 成员访问
OutClass outClass = new OutClass();
System.out.println(outClass.a);
System.out.println(OutClass.b);
System.out.println(outClass.c);
outClass.methodA();
outClass.methodB();
// 创建实例内部类对象
OutClass.InnerClass innerClass2 = outClass.new InnerClass();
innerClass2.methodInner();
}
}
注意事项
1.创建实例内部类对象时必须借助外部类
2.在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this. 同名成员 来访问
3.实例内部类对象必须在先有外部类对象前提下才能创建

2.静态内部类

static 修饰的内部成员类称为静态内部类。
public class OutClass {
private int a;
static int b;
public void methodA(){
a = 10;
System.out.println(a);
}
public static void methodB(){
System.out.println(b);
}
// 静态内部类:被static修饰的成员内部类
static class InnerClass{
public void methodInner(){
// 在内部类中只能访问外部类的静态成员
// a = 100; // 编译失败,因为a不是类成员变量
b =200;
// methodA(); // 编译失败,因为methodB()不是类成员方法
methodB();
}
}
public static void main(String[] args) {
// 静态内部类对象创建 & 成员访问
OutClass.InnerClass innerClass = new OutClass.InnerClass();
innerClass.methodInner();
}
}
注意事项
1. 在静态内部类中只能访问外部类中的静态成员或者一个被final修饰的常量(因为常量在编译时就确定了,与类啥的无关)
2. 创建静态内部类对象时, 不需要先创建外部类对象,直接通过类名创建

3.局部内部类

定义在外部类的方法体或者 {} 中,该种内部类只能在其定义的位置使用,一般使用的非常少,此处简单了解下语法格式。
public class OutClass {
int a = 10;
public void method(){
int b = 10;
// 局部内部类:定义在方法体内部
// 不能被public、static等访问限定符修饰
class InnerClass{
public void methodInnerClass(){
System.out.println(a);
System.out.println(b);
}
}
// 只能在该方法体内部使用,其他位置都不能用
InnerClass innerClass = new InnerClass();
innerClass.methodInnerClass();
}
public static void main(String[] args) {
OutClass out=new OutClass();
out.method();
}
}

4.匿名内部类

定义在外部类的方法体或者{}中,该种内部类没有名字,直接通过对象名访问。在多线程这里会用到。

interface IA {
a=1;
    void test();
}
public class Test2 {
    public static void main(String[] args) {
        //new IA()    ;
//在main方法里面创建了一个类,类名不知道,但是对象名是a,他实现了IA接口且重写了抽象方法
        IA a = new IA() {
            @Override
            public void test() {
                System.out.println("这是重写了接口的方法!"+a);
            }
        };
        a.test();

//或者下面这样写
        new IA() {
            @Override
            public void test() {
                System.out.println("这是重写了接口的方法!");
            }
        }.test();
    }
}
//输出结果
这是重写了接口的方法!1
这是重写了接口的方法!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

latex使用bib引用参考文献时,正文编号顺序乱序解决办法,两分钟搞定!

一、背景 用Latex写文章时,使用bib添加参考文献是一种最为简便的方式。但有的期刊模板,如机器人顶会IROS,会出现正文参考文献序号没按顺序排列的情况,如下图所示。按理说文献[4]应该是文献[2],[2]应该是[3]&#xff0…

现代机器学习(ML)技术在医疗成像领域的新应用

现代机器学习(ML)技术在医疗成像领域的新应用主要包括以下几个方面: 一、自动病变检测 使用深度学习算法,尤其是卷积神经网络(CNN),自动识别和分类医学影像中的病变,如肿瘤、炎症等。自动病变检测是现代机器学习技术在医疗成像领域应用的一个重要方向。它主要通过以下…

spark实验求TOP值

实验1:求TOP值 已知存在两个文本文件,file1.txt和file2.txt,内容分别如下: file1.txt 1,1768,50,155 2,1218, 600,211 3,2239,788,242 4,3101,28,599 5,4899,290,129 6,3110,54,1201 7,4436,259,877 8,2369,7890,27 fil…

K8S 哲学 - deployment -- kubectl【create 、 rollout 、edit、scale、set】

kubectl create kubectl rollout kubectl edit kubectl set kubectl scale 1、创建与配置文件解析 2、deploy 滚动更新 :template 里面的内容改变触发滚动更新 编辑该 deploy 的 配置文件 ,加入一个 label 不会触发滚动更新 改变 nginx镜…

HTML批量文件上传方案——图像预览方式

作者:私语茶馆 1.HTML多文件上传的关键方案 多文件上传包括:文件有效性校验,文件预览、存储和进度展示多个方面,本章节介绍的是文件预览的实现方案。 2.文件上传前预览 2.1.效果 选择文件前: 选择文件后: 2.2.CSS文件代码 StorageCenter.css代码 html {font-family:…

刚刚!MySQL8.4.0 LTS发布,接着再探

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

郡望是一个什么性质的概念

顾名思义,郡望就是某郡中的望族。 别看现在听起来没什么感觉,在古代却是一个沉甸甸的庞然大物,是标志贵贱的,决定了个人,家庭和家族的未来。 自秦朝实行郡县制,直到唐朝废郡,郡做为一级或州管的…

【AIGC调研系列】LLaVA++整合Phi-3和Llama-3能够实现什么

LLaVA能够为Phi-3和Llama-3带来的主要好处包括: 视觉处理能力的增强:通过整合Phi-3和Llama-3模型,创建了具备视觉处理能力的Phi-3-V和Llama-3-V版本,这意味着这些模型现在能够理解和生成与图像相关的内容[1]。这种能力的增加&…

浅论汽车研发项目数字化管理之道

随着汽车行业竞争不断加剧,汽车厂商能否快速、高质地推出贴合市场需求的新车型已经成为车企竞争的重要手段,而汽车研发具备流程复杂、专业领域多、协作难度大、质量要求高等特点,企业如果缺少科学健全的项目管理体系,将会在汽车研…

如何查看我的Docker 容器和 `app.py` 脚本有足够的权限来读取 `config.json` 文件

要检查 Docker 容器和 app.py 脚本是否具有读取 config.json 文件的足够权限,你可以按照以下步骤操作: 检查宿主机上的文件权限: 在宿主机上,使用 ls -l 命令查看 config.json 文件的权限。 ls -l /path/to/config.json确保该文件…

从车规传感器发展的正反面,看智驾发展的“胜负手”

北京车展进程过半,雷军和周鸿祎成为车展新晋“网红”的同时,智能驾驶成为观众讨论最务实的话题之一。端到端自动驾驶、城市NOA这些炙手可热的话题,占据了大部分的关注度。 但在高阶智能驾驶之外,智能驾驶同样具有频繁使用需求的低…

实验案例一:在一台交换机上配置 VLAN

1.实验环境 实验拓扑图结构如图12.12所示,其中PC1和PC3属于VLAN 2,PC2属于VLAN 3,PC1的IP 地址为192.168.0.2/24,PC2的P 地址为 192.168.1.2/24,PC3的P地址为192.168.0.3/24 2.需求描述 要求处于相同VLAN中的主机能够…

CSS的布局模式

前言&#xff1a; 我们可以看到京东的官网上的一些例子&#xff08;如下图&#xff09;&#xff0c;在同一排中能够存在多个div&#xff0c;这是通过布局方式&#xff08;例如浮动&#xff09;来实现的。 CSS传统的布局模式&#xff1a; <1>普通流&#xff08;又称之为标…

Codeforces Round 928 (Div. 4) F. Vlad and Avoiding X

Vlad and Avoiding X 题目描述 弗拉迪斯拉夫有一个大小为 7 7 7 \times 7 77 的网格&#xff0c;其中每个单元格的颜色都是黑色或白色。在一次操作中&#xff0c;他可以选择任意一个单元格并改变其颜色&#xff08;黑色 ↔ \leftrightarrow ↔ 白色&#xff09;。 请找出…

39.WEB渗透测试-信息收集-域名、指纹收集(1)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;38.WEB渗透测试-信息收集-信息收集-企业信息收集&#xff08;5&#xff09; 子域名信息收…

公文写作笔记

标题 最后一行的日期&#xff0c;后边占4个格子。两个数字占一格。落款单位在日期的正上方。 格式积累 内容&#xff1a; ①开头&#xff1a;缘由 ②主题&#xff1a;对策&#xff08;别人做得好&#xff0c;就借鉴&#xff09; ③结尾&#xff1a;简单的总结&#xff08;字…

LeetCode - 611.有效三角形个数

题目链接 LeetCode - 611. 有效三角形的个数 动画解释 代码解释 class Solution { public:int triangleNumber(vector<int>& nums) {sort(nums.begin(),nums.end());int cout 0;int fix nums.size()-1;while(fix>1){int left 0;int right fix-1;while(left &l…

rust将json字符串直接转为map对象或者hashmap对象

有些时候我们还真的不清楚返回的json数据里面到底有哪些数据&#xff0c;数据类型是什么等&#xff0c;这个时候就可以使用批处理的方式将json字符串转为一个对象&#xff0c;然后通过这个对象的get方法来获取json里面的数据。 pub async fn test_json(&self) {let json_st…

通过AI助手实现一个nas定时任务更新阿里云域名解析

一.通过AI助手实现一个ip-domain.py的脚本 起一个Python脚本&#xff0c;ip-domain.py&#xff1b;注意已安装Python3.的运行环境&#xff1b;将下面阿里云相关配置添加&#xff0c;注意这里引用了两个包&#xff0c;requests和alibabacloud_alidns20150109&#xff1b;执行前…

如何设计一套轻量级的批处理技术?

对于任何应用程序而言&#xff0c;可以说批处理都是一种基础设施类的技术组件。批处理技术应用非常广泛&#xff0c;数据报表、统计分析、定时任务等场景实际上都可以应用批处理技术。如何在不需要人工参与的情况下进行离线、自动、高效地进行复杂数据分析是批处理程序需要考虑…
最新文章