匿名内部类

一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类,嵌套其他的类称为外部类。

类的五大成员:属性、方法、构造器、代码块、内部类

内部类最大的特点的就是直接访问私有属性,并且可以体现类鱼类之间的包含关系。

基本语法:

class Outer{  //外部类class Inner{   //内部类}
}
class Other{  //其他类
}

内部类的分类:

定义在外部类局部位置上(比如方法内)

①局部内部类(有类名)

匿名内部类(没有类名)

定义在外部类的成员位置上

①成员内部类(没有static修饰)

②静态内部类(使用static修饰)

---------------------------------------------------------------------------------------------------------------------------------

①局部内部类的使用

说明:局部内部类是定义在外部类的局部位置,比如:方法中,并且有类名

1、可以直接访问外部类的所有成员,包含私有的。

2、不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量不能使用修饰符。但是可以使用final修饰,因为局部变量也可以使用final。

3、作用域:仅仅在定义它的方法或代码块中。

4、局部内部类----访问---外部类的成员:直接访问。

5、外部类----访问---局部内部类的成员:创建对象,再访问。(必须在作用域中)

class Outer{private  int n=10;private  void x(){}public void m(){
//        不能添加访问修饰符,因为它的地位就是一个局部变量。public class Inner{  //报错public void f(){
//                可以直接访问外部类的所有成员,包含私有的。System.out.println("n="+n);x();}}
//        外部类----访问---局部内部类的成员
//        创建对象,再访问。(必须在作用域中,方法中)Inner inner=new Inner();inner.f();}}

6、外部其他类不能访问局部内部类。(因为局部内部类地位是一个局部变量)

7、如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以用   外部类名.this.成员   去访问。

public static void main(String[] args) {Outer outer=new Outer();outer.m();
}
class Outer{private  int n=10;public   void f(){System.out.println("我是外部类");}public void m(){
//        不能添加访问修饰符,因为它的地位就是一个局部变量。class Inner{int n=80;public void x(){System.out.println("n="+n);   // 输出80System.out.println("n="+Outer.this.n); //输出10
//                可以直接访问外部类的所有成员,包含私有的。}}
//        外部类----访问---局部内部类的成员
//        创建对象,再访问。(必须在作用域中,方法中)Inner inner=new Inner();inner.x();}}

---------------------------------------------------------------------------------------------------------------------------------

②匿名内部类的使用

基本语法:

new  类或者接口(参数列表){//类体
};

①本质还是类  ②内部类  ③该类没有名字  ④同时还是一个对象

说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名

基于接口的匿名内部类:

需要重写接口的抽象方法

 public static void main(String[] args) {Outer outer=new Outer();outer.f();}
class Outer {public void f() {  //外部类的方法中//匿名内部类//利用接口并创建对象A a=new A() {//编译类型 A,运行类型:Outer$1(系统默认)@Overridepublic void m() {System.out.println("匿名内部类");}};//对象调方法a.m();}
}//接口
interface  A{
public  void  m();
}

匿名内部类也是一个对象,所以可以直接调用方法:

  new A() {//编译类型 A,运行类型:Outer$1(系统默认)@Overridepublic void m() {System.out.println("匿名内部类");}}.m();  //直接调用

结果:

基于类的匿名内部类写法一样

注意点和内部类一样。

例题:

代码:

 public static void main(String[] args) {
phone p=new phone();
p.alarm(new Bell() {@Overridepublic void ring() {System.out.println("打铃了");}
});}
interface  Bell{void ring();
}
class phone{public static void alarm(Bell bell){
bell.ring();}
}

结果:

---------------------------------------------------------------------------------------------------------------------------------

③成员内部类

成员内部类是定义在外部的成员位置,并且没有static修饰。

1、可以直接访问外部类的所有成员,包含私有的。

2、可以任意添加访问修饰符,因为它的位置就是一个成员。

 public static void main(String[] args) {A a =new A();a.t();
}
class A{private  int age=24;public  String name="张三";//成员内部类public class B{  //可以任意添加访问修饰符public  void  show(){System.out.println("姓名为:"+name+", 年龄为:"+age);}}//写方法public void  t(){//使用成员内部类B b=new B();b.show();}}

输出结果为:

3、作用域:和外部类的其他成员一样,为整个类体。

4、成员内部类访问外部类:直接访问。

5、外部类访问内部类 :创建对象,再访问

6、外部其他类访问成员内部类

---------------------------------------------------------------------------------------------------------------------------------

④静态内部类的使用

静态内部类是定义在外部类的成员位置,并且有static修饰

1、可以直接访问外部类的所有静态成员,包含私有的,但是不能直接访问非静态成员。

2、可以添加任意访问修饰符,相当于一个成员。

3、作用域:同其他的成员,为整个类体

4、静态内部类访问外部类:直接访问所有的静态成员

5、外部类访问内部类:创建对象,再访问。

6、外部类访问静态内部类

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

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

相关文章

北斗三号海上人员落水报警及示位搜救系统升级方案

随着海洋经济的快速发展,海上作业活动日益频繁,人员安全问题也日益凸显。传统的海上救援手段存在诸多不足,如救援响应时间长、定位不准确等。为了提高海上救援的效率和成功率,北斗三号海上人员落水报警及示位搜救系统应运而生。该…

微波传感器 - 从零开始认识各种传感器【第二十期】

微波传感器|从零开始认识各种传感器 1、什么是微波传感器 微波传感器是一种利用微波技术进行探测和测量的传感器。 一般来说,微波是波长为1到1000毫米的电磁波。使用微波传感器,在不接触目标物体的情况下,通过检测和分析微波信号的反射、散…

Matplotlib柱形图大揭秘:让数据‘站’起来,比增高鞋垫还管用!

1. Matplotlib绘制柱形图/柱状图/条形图 柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其表示的数据成正比关系 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as p…

机械学习—零基础学习日志(高数16——函数极限性质)

零基础为了学人工智能,真的开始复习高数 这里我们继续学习函数极限的性质。 局部有界性 充分条件与必要条件 极限存在是函数局部有界的充分条件。什么是充分条件,什么是必要条件呢?我这里做了一点小思考,和大家分享&#xff0c…

Windows11下 Visual Studio 2022 + Qt6 的 WebSocket 线程池异步 客户端

Windows11下 Visual Studio 2022 + Qt6 的 WebSocket 线程池异步 客户端 1 开发 WebSocket 客户端1.1 开发环境1.1.1 为Qt 6安装 websockets1.2 .基于Qt6的 QWebSocket 客户端示例1.2.1 实现 WebSocket 客户端1.2.2 创建 QtQWesocketClient1.2.3 创建QWebsocket对象1.2.3.1 添加…

iOS object-C 解答算法:找到所有数组中消失的数字(leetCode-448)

找到所有数组中消失的数字(leetCode-448) 题目如下图:(也可以到leetCode上看完整题目,题号448) 光看题看可能有点难以理解,我们结合示例1来理解一下这道题. 有8个整数的数组 nums [4,3,2,7,8,2,3,1], 求在闭区间[1,8]范围内(即1,2,3,4,5,6,7,8)的数字,哪几个没有出现在数组 …

新装centos7虚拟机如何配置网络,NAT配置固定IP

首先声明,我想使用的是NAT连接模式,并且设置完IP之后,使得这个IP固定住,以后不会再变了。 文章目录 1,打开Vmware软件的【编辑】-【虚拟网络编辑器】2,先选择VMnet8(画1处)&#xf…

解析capl文件生成XML Test Module对应的xml工具

之前一直用的CAPL Test Module来写代码,所有的控制都是在MainTest()函数来实现的,但是有一次,代码都写完了,突然需要用xml的这种方式来实现,很突然,之前也没研究过,整理这个xml整的一身汗&#…

Hive3:库操作常用语句

1、创建库 create database if not exists myhive;2、选择库 use myhive;3、查看当前选择的库 SELECT current_database();4、查看库详细信息 desc database myhive;可以查看数据文件在hdfs集群中的存储位置 5、创建库时制定hdfs的存储位置 create database myhive2 …

安全防护软件的必要性:从微软蓝屏事件谈起

最近微软遭遇了的大规模蓝屏事件,让全球很多用户措手不及。这次事件告诉我们,保护我们的电脑和数据,安全防护软件是多么重要。 微软蓝屏事件源于网络安全公司CrowdStrike的技术更新错误,导致全球范围内大量Windows用户系统崩溃&a…

什么是五力分析?5分钟带你了解它在企业财务经营中的应用与价值!

如今,随着全球化进程的不断加速,市场环境复杂多变,市场竞争日益激烈,财务经营已经成为了企业应对复杂市场环境、保持自身竞争力的关键。体系化的五力分析平台能够为企业提供一套全面的解决方案,帮助企业在盈利能力、偿…

HamonyOS性能优化工具和方法

性能优化,如何做到更快的启动、更流畅的使用,概括图如下 ArkTS高性能编程: 1. ArkTS规则:有利于方舟编译运行时进行编译优化 2. 使用AOT(Ahead Of Time)模式对应用进行编译优化:方舟编译运行时通过采用PGO(Profile-Gui…

React 学习——组件内通信(兄弟之间)

A组件 > B组件 核心思路&#xff1a; 1、A组件先通过子传父的方式把数据传给父组件App 2、App拿到数据后通过父传子的方式再传递给B组件 import { useState } from "react" function A({onGetMsg}){const AMsg 我是A组件的消息return (<div><button…

ESP-ADF适配到自定义开发板中

ESP-ADF适配到自定义开发板中 前言:项目开发完了,来记录一下开发过程。 安装: 这里采用vscode+ESP-IDF+ESP-ADF的开发方式。 安装esp-idf的方法很简单,网上都是,这里不说了。想用esp-adf那么你idf的环境肯定是已经搭建好了。 安装adf也很简单,一步完成。 按下F1,选…

鸿蒙对接极光推送时候报错1000900010,厂商token获取失败

在AppGallery Connect上配置项目的调试证书&#xff0c;然后手动导入&#xff0c;不要用IDE的自动构建证书&#xff1a; https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/

web前端开发一、VScode环境搭建

1、VScode安装live server插件&#xff0c;写完代码后&#xff0c;保存就会在浏览器自动更新&#xff0c;不需要再去浏览器点击刷新了 2、创建html文件 3、在文件中输入感叹号 &#xff01; 4、选择第一个&#xff0c;然后回车&#xff0c;就会自动输入html的标准程序 5、…

js_拳皇(下)

文章目录 架构设计视频演示碰撞检测碰撞检测函数 构想血条和计时器全屏后续工作 架构设计 一图胜千言 #mermaid-svg-erOUDyAO5t0XgYyU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-erOUDyAO5t0XgYyU .error-icon{…

微信聊天记录丢失怎么办?3款数据恢复大师免费版,你选对了吗?

在这个网络时代&#xff0c;微信可不只是用来聊天的&#xff0c;它还帮我们处理工作、记录生活、保存美好回忆。但是&#xff0c;如果微信里的东西突然没了&#xff0c;那感觉就像是回到了没有网络的黑暗时期&#xff0c;让人焦虑又无助。别怕&#xff0c;今天咱们就来说说大家…

整箱排柜不返工?用易境通散拼系统就OK

想必困扰散货拼柜小伙伴们一大难题就是&#xff0c;怎么把错乱纷繁的货物有序地整箱排柜&#xff0c;并且要保证集装箱高效利用&#xff0c;运输成本尽量降低。这不仅要求操作者具备卓越的统筹规划能力&#xff0c;更需长期积累的实践经验和敏锐的应变能力。易境通散拼系统可以…

HarmonyOS NEXT星河版零基础入门到实战

文章目录 一、HarmonyOS NEXT介绍学习内容1、鸿蒙APP开发2、能力套件开发3、全场景开发适合人群 持续更新中✒️总结 一、HarmonyOS NEXT介绍 放弃安卓框架之后&#xff0c;HarmonyOS NEXT成为真正独立于安卓、iOS的操作系统&#xff0c;堪称是一场史无前例的脱胎换骨。在其众多…