由浅到深认识Java语言(17):内部类

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(16):接口

27.内部类(内部类:类的第五成员)

内部类定义

面向对象的重点是类的设计,类的设计重点是设计类的成员;

内部类是类的第五大成员,由于类中有一些成员没有办法简单地通过一个属性或者一个方法就能完全描述;

比如一个人类,脑袋就能成为一个内部类:

class Person{
	String name;
	int age;
	class brain{  //内部类
		String n;
		int a;
		public(){};
	}
}

内部类分类

  • 成员内部类:普通成员内部类,静态成员内部类;
  • 局部内部类:普通的局部内部类,匿名的局部内部类

局部内部类

局部内部类是定义在方法内部的类;

局部内部类的应用场景:

往往一个方法需要返回一个抽象类或者接口的对象,对于我们来说有两种解决方案;

一是在类的外部定义一个抽象类的子类,或者接口的实现类,但是在类的外部定义的这个类只用了这一次,所以这样定义在外部会消耗更多的资源;

二是在类的内部定义一个内部类,此时这个类就是一个局部内部类;

接口:

正常写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		getMyInterface();
	}
	public static MyInterface getMyInterface() {   //3.进行抽象类的创建
		MyInterface mif = new MyInterfaceImpl();  //4.运用多态
		mif.m1();
		return mif;
	}
}

interface MyInterface {   //1.接口,也是一个极端的抽象类
	void m1();
}

class MyInterfaceImpl implements MyInterface {   //2.将接口转为普通类
	@Override
	public void m1() {
		// TODO Auto-generated method stub
		System.out.println("  学校  ");
	}
}

内部类写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		getMyInterface();
	}
	public static MyInterface getMyInterface() {
		class MyInterfaceImpl implements MyInterface {  //将外部类转为内部类
			@Override
			public void m1() {
				// TODO Auto-generated method stub
				System.out.println("  学校  ");
			}
		}
		MyInterface mif = new MyInterfaceImpl();
		mif.m1();
		return mif;
	}
}

interface MyInterface {
	void m1();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

抽象类:

正常写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		Student();
	}

	public static Person Student() {
		Person Stu = new Student();
		Stu.show();
		return Stu;
	}
}

abstract class Person {
	public abstract void show();
}

class Student extends Person {
	@Override
	public void show() {
		// TODO Auto-generated method stub
		System.out.println("Student.show()");
	}
}

内部类写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		Student();
	}
	public static Person Student() {
		class Student extends Person{
			@Override
			public void show() {
				// TODO Auto-generated method stub
				System.out.println("Student.show()");
			}
		}
		Person Stu = new Student();
		Stu.show();
		return Stu;
	}
}

abstract class Person{
	public abstract void show();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

匿名内部类

局部内部类的类名并不是很重要,可以直接简化,就有了下面的匿名内部类,这个就好似类与抽象类的关系,在匿名内部类中继承(实现)了父类;

基本格式:

//对象名 变量名 = new 对象名(){
//		方法的重写:
//}
//例如下:
Animal a = new Animal(){
    public void show(){
        
    }
};  //注意:!!!!这里有一个分号!!!!
abstract class Animal{
    public abstract void show(){
        
    }
}

将局部内部类的实例改写如下:

接口

package top.sharehome.Bag;

public class Demo {
    public static void main(String[] args) {
        MyInterfaceImpl();
    }
	public static MyInterface MyInterfaceImpl() {
		MyInterface mif = new MyInterface() {
			@Override
			public void m1() {
				// TODO Auto-generated method stub
				System.out.println("  学校  ");
			}
		};
		mif.m1();
        return mif;
	}
}

interface MyInterface{
	void m1();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

抽象类:

package top.sharehome.Bag;

public class Demo {
    public static void main(String[] args) {
        Student();
    }
	public static Person Student () {
		Person Stu = new Person() {
			@Override
			public void show() {
				// TODO Auto-generated method stub
				System.out.println("Student.show()");
			}
		};
		Stu.show();
        return Stu;
	}
}

abstract class Person {
	public abstract void show();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Java语言(18):权限修饰符&包&Object类

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

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

相关文章

python框架的一加剧场管理系统的设计与实现flask-django-nodejs-php

本文讲述了一加剧场管理系统。结合电子管理系统的特点,分析了一加剧场管理系统的背景,给出了一加剧场管理系统实现的设计方案。 本论文主要完成不同用户的权限划分,不同用户具有不同权限的操作功能,在用户模块,主要有用…

mysql之基本概念与安装

一 数据库的基本概念 1.1 数据 记录个体的信息 1.2 表 存放信息的集合,行于与列 1.3 数据库 数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合 1.4 数据库管理系统 数据库管理系统(DatabaseManagementSystem,DBMS&…

MySQL面试题--开发(最全,涵盖SQL基础、架构、事务)

MySQL面试题--事务https://mp.csdn.net/mp_blog/creation/editor/136947072 MySQL面试题--MySQL内部技术架构https://blog.csdn.net/Timebro/article/details/136946046?spm1001.2014.3001.5501 MySQL面试题--最全面-索引https://blog.csdn.net/Timebro/article/details/136…

深度学习基础之《TensorFlow框架(10)—案例:实现线性回归(2)》

增加其他功能 一、增加变量显示 1、目的:在TensorBoard当中观察模型的参数、损失值等变量值的变化 2、收集变量 不同的变量要用不同的方式收集 (1)tf.summary.scalar(name, tensor) 收集对于损失函数和准确率等单值变量,name为…

mac下 3.6.3 版本 maven

问题 Blocked mirror for repositories: [snapshots (http://xxx/artifactory/gm-maven-vir, default, releasessnapshots)]无法访问 Maven 3.8.1 http 仓库。可能的解决方案: - 检查 Maven settings.xml 是否不包含 http 仓库 - 检查 Maven pom 文件是否不包含 http 仓库 htt…

【蓝桥杯嵌入式】四、各种外设驱动(九)ADC(1):软件触发与中断触发方式

温馨提示:本文不会重复之前提到的内容,如需查看,请参考附录 【蓝桥杯嵌入式】附录 目录 重点提炼: 一、需求分析 1、需要的外设资源分析: 2、外设具体分析: 比赛时ADC可能需要配置的部分:…

MySQL慢查优化 循环/嵌套子查询(DEPENDENT SUBQUERY)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 虽然 MySQL5.6 引入…

安装vcenter管理esxi虚拟化操作系统

安装vcenter管理esxi虚拟化操作系统 文章目录 安装vcenter管理esxi虚拟化操作系统1.安装vcenter2.vcenter的应用 1.安装vcenter esxi虚拟机具体安装步骤请参考上一篇文章,vcenter软件包需自己到网上下 2.vcenter的应用

Android Studio实现内容丰富的安卓校园二手交易平台(带聊天功能)

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号083 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看二手商品列表 3.发布二手商品 4.商品详情 5.聊天功能…

UE5制作推箱子动作时获取物体与角色朝向的角度及跨蓝图修改变量

就是脑残死磕,你们如果有更好的方法一定要留言啊~~独乐乐不如众乐乐。 做推箱子的时候需要考虑脸是不是面对着箱子,不是必须90度,可以有一个-45~45度的范围。 摸索了一下,有几种做法和几个小白坑,这里列出来。 一、准…

Apache James数据库存储用户信息的密码加密问题

项目场景 Apache James邮件服务器使用数据库来存储用户信息的密码加密问题&#xff1a; 将James的用户改为数据库存储James密码是如何加密验证的 1.将James的用户改为数据库存储 1、修改存储方式 找到james-2.3.2\apps\james\SAR-INF\config.xml 找到<users-store>标…

图论07-被包围的区域(Java)

7.被包围的区域 题目描述 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board [["X","X","X",&qu…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(五)—— Dropout和批归一化

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; Dropout和批归一化是深度学习领域中常用的正则化技术&…

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#x…

案例分享:一次NetApp A300/FAS8200控制器更换完美踩坑总结

本文是对近期更换一个net App AFF-A300 控制器更换过程中遇到问题的简单总结&#xff0c;希望对大家有所帮助&#xff0c;避免未来再进坑。 客户环境&#xff1a; 客户是一台NetApp的All Flash存储系统A300的一个控制器offline&#xff0c;另外一个控制器已经成功takeover了这…

python文学名著分享系统的设计与实现flask-django-nodejs-php

在此基础上&#xff0c;结合现有文学名著分享体系的特点&#xff0c;运用新技术&#xff0c;构建了以python为基础的文学名著分享信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色和多…

基于Spring Boot+Vue的高校办公室行政事务管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

【正点原子Linux连载】第十七章 异步通知实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十七…

代码+视频,R语言logistic回归交互项(交互作用)的可视化分析

交互作用效应(p for Interaction)在SCI文章中可以算是一个必杀技&#xff0c;几乎在高分的SCI中必出现&#xff0c;因为把人群分为亚组后再进行统计可以增强文章结果的可靠性&#xff0c;不仅如此&#xff0c;交互作用还可以使用来进行数据挖掘。在既往文章中&#xff0c;我们已…

MySQL:数据库基础

文章目录 什么是数据库数据库的认识登陆数据库理解数据库数据库的相关概念数据库的工作方式 数据库的基本使用服务器/数据库/表MySQL架构 本篇开始进行关于MySQL的学习&#xff0c;首先要对于数据库有一个基本的认识 什么是数据库 数据库主要是用来管理文件的&#xff0c;那此…