内部类(下)匿名内部类,静态内部类的使用

文章目录

  • 前言
  • 一、匿名内部类
  • 二、静态内部类
  • 三、内部类的继承
  • 总结

前言

        该文将会介绍匿名内部类、静态内部类的使用,补充完毕java中的内部类。补充内容为向上转型为接口、使用this关键字获取引用、内部类的继承。


一、匿名内部类

        定义:没有名称的内部类。

        语法:

return new A(){
    //匿名内部类
    //该匿名内部类的外部类为:A
}

 或者为:

ParentClass obj = new ParentClass(){
    //创建了一个以ParentClass为外部类的匿名内部类
    //实现代码
};

      注:该匿名内部类的外部类为 A。在实例化该外部类时,同时实例化了该匿名内部类。

        实例:

public class Demo3 {
	public OutInterface2 action(){
		//实例化接口OutInterface2
		return new OutInterface2() {
			/*在 return 语句中编写一个返回值为实例化的一个外部类 OutInterface2,
			 *java中最常用的内部类
			 创建了一个匿名内部类,由于该内部类没有名字,所以被称为"匿名"
			 						*/
			private int i =0;
			public int getValue() {
				return i;
            //匿名内部类的成员变量和成员方法
			}
		};	//匿名内部类{}结尾需要一个 ; 符号
	}
}	

         规则1:匿名内部类定义结束后,需要加分号 ; 加以标识,这个分号并不表示内部类的结束,而是代表匿名内部类的创建。

         规则2:匿名内部类的外部类为,return new 语句中的实例化的类。 

         规则3: 匿名内部类没有名字。

二、静态内部类

        定义: 在内部类前添加  static 关键字修饰。

        语法:

class OuterClass {
    // 外部类的成员和方法
     static class StaticInnerClass {
        // 静态内部类的成员和方法
    }
}

         规则1:如果创建静态内部类的对象,不需要其外部类的对象,直接在其中声明 static成员即可。

public class Demo4 {
	
	static class innerClass4{
        //创建了一个静态内部类
	}
	static innerClass4 n = new innerClass4();
    //在外部类中创建了一个静态内部类的对象
}

         规则2:不能从静态内部类的对象中访问非静态外部类的对象。不可以使用外部类的非静态成员。(因为静态区不能调用非静态区)

         规则3:main静态方法可以在静态内部类中使用。与在主方法中使用的main静态方法,实现效果一致。例如,system.out.println 语句输出内容,都会在控制台输出。

public class Demo4 {
	
	static class innerClass4{
        //这里是一个静态内部类
		public static void main(String[] args) {
            //静态方法中使用println
			System.out.println("我是静态内部类");
		}
	}
}

         输出结果:

        问题: 进行程序测试时,如果每一个Java文件中都设置一个主方法,将出现很多额外代码,而程序本身不需要这些主方法,该怎么做呢?

        解决方法:将多个主方法写入几个静态内部类,主要作用是,方便进行调试

三、内部类的继承

        内部类的继承

                语法:class 子类 extends 外部类.内部类 

class OutputInnerClass extends ClassA.ClassB{
    //OutputInnerClass 继承了ClassA的内部类ClassB
  	public OutputInnerClass(ClassA a){
	    a.super();
    }
    //类继承内部类必写的一个构造方法
}

                注:在某个类继承内部类时,必须硬性创建这个子类一个带参数的构造方法,并且该构造方法的参数为需要继承的内部类的外部类的引用,同时在构造方法体中通过该参数,使用 super() 方法。调用了这个外部类,才能继承其中的内部类。

                问题:匿名内部类没有名字,那么其他类该怎么继承该内部类呢?

                解决方法:定义一个实现了某个接口的匿名内部类,通过内部类覆写接口的抽象方法,然后在其他类中继承这个匿名内部类。

                实例:

interface MyInterface {
    void doSomething();
}
 class MyClass {
    MyInterface myInterface = new MyInterface() {
        
        public void doSomething() {
            System.out.println("Doing something in anonymous inner class.");
        }
    };
}
 class MySubClass extends MyClass {
    // 可以使用 myInterface 对象调用 doSomething 方法
}

总结

        本文简单介绍了匿名内部类、静态内部类,以及内部类的继承。补充完整了内部类的使用。如果读者对文章所提到的内容有什么疑问或补充,欢迎在评论区中评论,博主会及时进行反馈的。

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

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

相关文章

嵌入式开发:单片机嵌入式Linux学习路径

SOC(System on a Chip)的本质区别在于架构和功能。低端SOC如基于Cortex-M架构的芯片,如STM32和NXP LPC1xxx系列,不具备MMU(Memory Management Unit),适用于轻量级实时操作系统如uCOS和FreeRTOS。…

Matlab Image Processing toolbox 下载安装方法

当安装好Matlab之后,发现没有Image Processing toolbox这个图像处理工具箱 从新安装一遍, 选上 Image Processing toolbox 但是不用选matlab即可 1.找到之前安装时的Setup安装程序包,按照之前安装Matlab步骤,到选择需要安装的Ma…

360T7路由器进行WiFi无线中继教程

360T7路由器进行WiFi中继教程 1. 概述2. 360T7路由器进行WiFi中继实现教程2.1 登录路由器管理界面2.2 选择上网方式2.3 搜索WiFi2.4 连接WiFi2.5 点击确认2.6 在主页面查看网络 1. 概述 中继路由系统由一组中继路由器组成,为不能交换路由信息的路由域提供中继路由。…

本土机器视觉创业企业涌现,深眸科技携手AI+3D视觉勇闯小场景赛道

随着工业自动化技术向智能化方向发展,人工智能实现快速落地,机器视觉应用产品在算力、算法和技术等方面得到持续升级,助力中国机器视觉行业进入高质量发展阶段。 在制造业转型升级、新兴产业发展的过程中,中国作为全球制造中心之…

深入学习 Redis - 基于 Jedis 通过 Java 客户端操作 Redis

目录 一、Jedis 依赖 二、Java 客户端操控 redis 2.1、准备工作(ssh 隧道) 2.2、概要 2.2、string 2.3、hash 2.4、list 2.5、set 2.5、zset 一、Jedis 依赖 自己去 中央仓库 上面找. 二、Java 客户端操控 redis 2.1、准备工作(ssh 隧…

简要介绍 | 自编码器:神经网络中的自我复制艺术

注1:本文系“简要介绍”系列之一,仅从概念上对自编码器进行非常简要的介绍,不适合用于深入和详细的了解。 自编码器:神经网络中的自我复制艺术 Autoencoders Explained - MATLAB & Simulink 一、背景介绍 自编码器&#xff0…

高可用(keepalived)部署方案

前言:为了减少三维数据中心可视化管理系统的停工时间,保持其服务的高度可用性。同时部署多套同样的三维可视化系统,让三维数据中心可视化系统同时部署并运行到多个服务器上。同时提供一个虚拟IP,然后外面通过这个虚拟IP来访问三维…

[数据集][目标检测]城市道路井盖破损丢失目标检测1377张

数据集制作单位:未来自主研究中心(FIRC) 数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1377 标注数量(xml文件个数):1377 标注类别数&a…

MIT 6.830数据库系统 -- lab five

MIT 6.830数据库系统 -- lab five 项目拉取引言搜索练习1 BTreeFile.findLeafPage() 插入练习2 Spliting Page 删除练习3 页再分配练习4 合并页 事务小结 项目拉取 原项目使用ant进行项目构建,我已经更改为Maven构建,大家直接拉取我改好后的项目即可: …

【Linux】网络基础

🍎作者:阿润菜菜 📖专栏:Linux系统网络编程 文章目录 一、协议初识和网络协议分层(TCP/IP四层模型)认识协议TCP/IP五层(或四层)模型 二、认识MAC地址和IP地址认识MAC地址认识IP地址认…

关闭深度学习训练/推理进程的方法

引言 设想有一种情况,在ssh服务器训练/推理的时候,突然断线,再次打开ssh的时候,发现后台在运行,此时无法使用 ctrlc 终止,从而,可以用一个很简单的办法来结束:手动关闭进程。 方法 输…

rust 闭包函数

函数有自己的类型,可以像使用基础类型一样使用函数,包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数,也有自己的类型定义。不过,函数实际上是指针类型,在 rust 所有权中属于借用的关…

小白带你学习linux的mysql服务(主从mysql服务和读写分离三十一)

目录 二、MySQL Replication优点: 三、MySQL复制类型 1、异步复制(Asynchronous repication) 2、全同步复制(Fully synchronous replication) 3、半同步复制(Semisynchronous replication)…

设计模式-中介者模式在Java中使用示例-客户信息管理

场景 欲开发客户信息管理窗口界面,界面组件之间存在较为复杂的交互关系:如果删除一个客户, 要在客户列表(List)中删掉对应的项,客户选择组合框(ComboBox)中客户名称也将减少一个; 如果增加一个客户信息,…

网络安全行业相关证书

一:前言 对于考证这个话题,笔者的意见是:“有比没有好,有一定更好,但不一定必须;纸上证明终觉浅,安全还得实力行”。很多人对于各种机构的考证宣传搞得是云里雾里,不知道网络安全行业…

fastadmin采坑之固定表格某一列

// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: id,sortName: id,fixedColumns: true,fixedRightNumber: 1,columns: [[{checkbox: true},{field: id, title: __(Id)},{field: proposal_title, title: __(Proposal_title), opera…

动脑学院Jetpack Compose学习笔记

最近b站学习了一下Compose相关内容,整理了相关笔记,仅供大家参考。 资源链接如下,象征性收取1个积分 https://download.csdn.net/download/juliantem/88125198

【图论】树上差分(边差分)

一.简介 其实点差分和边差分区别不大。 点差分中,d数组存储的是树上的节点 边差分中,d数组存储的是当前节点到父节点的那条边的差分值。 指定注意的是:边差分中因为根连的父节点是虚点,所以遍历结果时应当忽略! 二…

腾讯云—自动挂载云盘

腾讯云,稍微麻烦了点。 腾讯云服务器,镜像为opencloudos 8。 ### 1、挂载云盘bash #首先通过以下命令,能够看到新的数据盘,如果不能需要通过腾讯云控制台卸载后,重新挂载,并重启服务器。 fdisk -l#为 /dev…

Houdini查看参数能用的内置变量($符号开头的变量)

在某个参数上,右键,reference, local variable就能看到