Java基础十九(内部类和匿名类)

1. 内部类

内部类是指将一个类定义在另外一个类的内部,称为内部类。
内部类分为 static 内部类普通内部类

public class A {// 定义内部类static class B {void show(){System.out.println("我是内部类");}}void call(B b) {b.show();}public static void main(String[] args) {A a = new A();a.call(new B());  // 我是内部类}
}

这个文件编译过后会产生两个 .class 文件,分别是 A.classA$B.class

一个类可以有多个内部类,内部类可以实现接口和继承类。内部类可以解决 java 单继承问题,因为内部类和外部类可以相互访问。

1.1 数据访问

外部类和内部类可以互相访问类中的成员,包括私有域的。

public class A {public String name;private int age;// 定义内部类public class B {public String bName;private int bAge;private void setbAge() {name = "";// 内部类访问外部类数据this.bAge = age;}void show(){System.out.println("我是内部类" + bName);}}public class C {public String cName;private int cAge;}// 外部类访问内部类的数据public void compareAge() {B b = new B();this.age = b.bAge;b.setbAge();C c = new C();c.cAge = 20;}}

内部类的实例化,内部类依托与外部类,所以内部类的实例化要先实例化外部类,然后再实例化内部类。

import kfm.bases.AbstractInterface.A.B;  // 导包
public class TestA {public static void main(String[] args) {A a = new A();// 此处如果不导包可以写成 A.B b = a.new B();B b = a.new B();b.bName = "小羊呆呆";b.show();  // 我是内部类小羊呆呆}
}

1.2 静态内部类

静态内部类不能直接访问外部类的成员,可以直接访问外部内的静态成员。

public class AA {static class BB{ //`static`内部类}
}
import com.itlaobing.demo.AA.BB;//导包
public class AATest {public static void main(String[] args) {AA a = new AA();BB b = new BB();//实例化内部类}
}

所有的访问修饰符都可以修饰内部类

1.3 外部类和内部类的区别

  • 访问修饰符:
    • 外部类只有两种访问修饰符:publicpackage-access
    • 内部类有四种访问修饰符:pulic \ protected \ package-access \ private
  • static 修饰:
    • 外部类不可以使用 static 修饰,内部类可以 。
  • 使用:
    • 外部类可以直接被使用,内部类的使用则依赖于外部类 。

2. 匿名类

在 Java 中,你可以使用匿名类(anonymous class)来创建一个没有显式定义的类,它是一个临时的、只在特定位置使用的类。

匿名类通常用于实现接口或扩展抽象类。它的语法形式如下:

接口名/父类名 变量名 = new 接口名/父类名() {// 匿名类的具体实现
};

示例

public interface A1 {void show();
}class Test02 {public static void main(String[] args) {A1 a1 = new A1() {@Overridepublic void show() {System.out.println("我是匿名类的show()方法");}};a1.show();}
}
  • 匿名类不能使用修饰符,如 public、private、protected。
  • 匿名类不能定义静态成员(包括静态块、静态方法、静态变量)。
  • 匿名类没有类名,因此无法定义构造方法。
  • 匿名类可以访问外部类中的成员,包括字段和方法。但如果要在匿名类中访问方法中的局部变量,则该变量必须声明为 final 或事实上的 final(即不会再改变)。
  • 匿名类通常用于实现接口或继承抽象类,相当于创建了一个实现了该接口或继承了该抽象类的临时子类。

由于匿名类没有类名,因此它的作用域被限制在创建它的方法或区域内部。这使得匿名类对外部代码隐藏起来,只能通过接口或抽象类进行访问和使用。匿名类是临时的,无法被重复使用。它只能在创建时被实例化并使用一次。匿名类通常适用于某个特定方法内部或作为方法的参数传递。

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

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

相关文章

每日一题:leetcode 57 插入区间

给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 输入:intervals [[1,3…

对标 GPT-4?科大讯飞刘庆峰:华为GPU技术能力已与英伟达持平

科大讯飞创始人、董事长刘庆峰在亚布力中国企业家论坛第十九届夏季高峰会上透露了关于自家大模型进展的一些新内容。刘庆峰认为,中国在人工智能领域的算法并没有问题,但是算力方面似乎一直被英伟达所限制。 以往的“百模大战”中,训练大型模型…

4. 池化层相关概念

4.1 池化层原理 ① 最大池化层有时也被称为下采样。 ② dilation为空洞卷积,如下图所示。 ③ Ceil_model为当超出区域时,只取最左上角的值。 ④ 池化使得数据由5 * 5 变为3 * 3,甚至1 * 1的,这样导致计算的参数会大大减小。例如1080P的电…

py 项目上线centos

1 服务器py版本 ps -ef|grep python|grep -v grep 2 2.x版本 安装 PyMySQL pip install PyMySQL0.9.3 3 后台运行py文件 nohup python down.py 1 > log.log 2>&1 & 这个命令将 down.py 程序放入后台运行, 同时将 stdout 输出到 log.log 文件中&…

SQLmap使用

文章目录 利用sqlmap 注入得到cms网站后台管理员账密获取数据库名称获取cms数据库的表名获取users表中的字段(内容)获取username字段和password字段的内容 salmap破解psot请求数据包salmap获取getshell 利用sqlmap 注入得到cms网站后台管理员账密 获取数…

mysql--数据库的操作

数据库,是数据存储的最大单元。 1 创建数据库 create database mydatabase; 每次创建数据库的时候,都会多一个文件夹,关系型数据库是存储在磁盘当中的,所以这时候可以查看新建的数据库 2 指定字符集 MySQL中的字符集转换过程 制…

ROS2之topic

目录 ros2 topic命令行 ros2 topic命令行 查看topic输出&#xff1a; ros2 topic echo <topic_name> 查看topic频率&#xff1a;ros2 topic hz <topic_name>

Django会话技术

文章目录 Cookie实践运行结果 CSRF防止CSRF Session实践 Cookie 理论上&#xff0c;一个用户的所有请求燥作都应该属于同一个会话&#xff0c;而另一个用户的所有请求操作则应该属于另一个会话&#xff0c;二者不能混淆&#xff0c;而web应用程序是使用HTTP协议传输数据的。HTT…

开始MySQL之路—— DDL语法、DML语法、DQL语法基本操作详解

DDL语法 DDL&#xff08;Data Definition Language&#xff09; 数据定义语言&#xff0c;该语言部分包括以下内容。 对数据库的常用操作 对表结构的常用操作 修改表结构 对数据库的常用操作 1: 查看当前所有的数据库 show databases; 2&#xff1a;创建数据库 create dat…

微信小程序+Taro 混编,Taro 使用微信原生 behaviors

最近有一个小程序项目&#xff0c;因为一些原因项目架构选择了微信小程序原生Taro 混编的方式进行开发&#xff0c;在开发的过程中发现 Taro 不支持使用原生的 behaviors 特性&#xff0c;因为混编的原因项目当中已有原生页面在使用 behaviors&#xff0c;所以需要一个方案在不…

那些你不得不知道的HTML知识点

目录 1、行内元素有哪些&#xff1f;块级元素有哪些&#xff1f; 空(void)元素有哪些&#xff1f;2、页面导入样式时&#xff0c;使用link和import有什么区别&#xff1f;3、title与h1的区别、b与strong的区别、i与em的区别&#xff1f;3.1 title与h1的区别&#xff1a;3.2 b与…

【谷粒商城】报错记录

无法从Nacos获取动态配置 原先gulimall-common中SpringCloud Alibaba的版本是2.1.0.RELEASE&#xff0c;无法从Nacos中获取配置文件信息 <dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId&…

设置某行被选中并滚动到改行

<el-table :data"tableDamItem" ref"singleTable" stripe style"width: 100%" height"250" highlight-current-row v-on:row-click"handleTableRow"></el-table>/*** 设置表格行被选中,并滚动到该行* param po…

Oracle中列的维护

由于商业环境中&#xff0c;数据是不断变化的&#xff0c;客户的需求也是不断变化的&#xff0c;所以当一个表用了一段时间后&#xff0c;其结构就有可能需要变化。 而在Oracle中&#xff0c;提供了alter table这种方式来改变列。 从Oracle9.2版本之后&#xff1a; 如果需要变…

SAP-FI-会计凭字段替代OBBH

会计凭证替代OBBH 业务&#xff1a;文本必须等于某个字段的值&#xff0c;例如凭证日期 关闭确认功能&#xff0c;输入OBBH 双击“替代”进入功能配置&#xff0c;或者用GGB1&#xff0c;用GGB1的功能更多。 点击行项目&#xff0c;点击“新建替换”保存 点击新建YXL7331,点击…

生态经济学领域里的R语言机器学(数据的收集与清洗、综合建模评价、数据的分析与可视化、数据的空间效应、因果推断等)

近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c;目前也在飞快的融入计量经济学研究。表面上机器学习通常使用大数据&#xf…

py 项目上线 日志输出 logging

1 指定文件 example.log import logging logging.basicConfig(levellogging.INFO, format%(asctime)s %(levelname)s %(message)s, datefmt%Y-%m-%d %H:%M:%S,handlers[logging.FileHandler("example.log"),logging.StreamHandler()]) 2 把print(sql)换成 logging…

Android开发Demo:TextView同时显示图片和文本、同时显示多种颜色

一、预期效果 1、在一个Android TextView控件之中&#xff0c;同时显示文本和图片&#xff0c;如下图所示&#xff0c;文本之间掺夹着一张或多张图片。 2、在一个Android TextView控件之中&#xff0c;同时显示多种颜色&#xff0c;如下图所示&#xff0c;一条文本显示了两种不…

常见API架构介绍

常见API架构介绍 两个服务间进行接口调用&#xff0c;通过调用API的形式进行交互&#xff0c;这是常见CS架构实现的模式&#xff0c;客户端通过调用API即可使用服务端提供的服务。相较于SPI这种模式&#xff0c;就是服务端只规定服务接口&#xff0c;但具体实现交由第三方或者自…

AcWing 898. 数字三角形 (每日一题)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 注意 像数组下标出现i-1的&#xff0c;在循环的时候从i1开始。 关于0x3f3f3f3f和Integer.MAX_VALUE 0x3f3f3f3f:1061109567 Integer.MAX_VALUE:2147483647 在选用Integ…