面向对象进阶5:类和泛型

内部类

在一个类的内部定义的类,内部类可以访问外部类的成员变量和成员方法,包括私有成员,内部类可以分为成员内部类,局部内部类,静态内部类和匿名内部类

public class InnerClass {class InnerC{}
}

1,成员内部类

定义在类中方法外的类,可以访问外部类的所有成员变量和方法,包括私有的

当一个类只为外部类服务,且在不需要在外部类之外被访问时,可以定义为成员内部类

eg:订单类中的商品,可以单独设置为一个类作为订单中的商品

创建内部类对象:

外部类名.内部类名 对象名 = 外部类对象.new 内部类构造方法

eg:

public class Test {public static void main(String[] args) {InnerClass test = new InnerClass();InnerClass.InnerC testInner = test.new InnerC(1);}
}

内部类中隐含了一个外部类的对象:外部类名.this

2,静态内部类

在类中方法外且以static关键字修饰的内部类,可以直接通过外部类的类名访问,并不依赖于外部类的对象

只能访问外部类的静态属性

当一个类只需要访问外部类的静态成员时,可以将其定义为静态的内部类

public class InnerClass {public static int s;public int b;class InnerC {public int a;public InnerC(int a) {this.a = a;System.out.println(this.a);}}static class InnerS {public static void main(String[] args) {System.out.println(s);}}
}
创建静态内部类对象

格式:外部类名.内部类名 对象名 = new 外部类名.内部类构造方法

public static void main(String[] args) {InnerClass test = new InnerClass();InnerClass.InnerS tests = new InnerClass.InnerS(11);
}

3,局部内部类

定义在方法中的内部类,只能在方法内部被使用,不能被方法之外的代码访问

public static void main(String[] args) {class Innerf{int a;public void showa(){System.out.println(a);}}Innerf innerf = new Innerf();innerf.showa();
}
创建局部内部类对象

直接在类之后正常创建对象即可

4,匿名内部类

一种特殊的内部类,没有名字且只能在声明的地方实例化一次

通常用于创建实现某个接口或者继承某个类的对象

创建接口实现类时直接new 接口名(){}即可

一般一个类只需要使用一次时使用

回调方法:一个函数的参数部分传入一个回调接口,当这个函数执行中满足某种条件时候,去调用接口中所实例的方法

eg:

public class Innerclass_test {public static void main(String[] args) {test1(new Test() {@Overridepublic void test() {}});}public static void test1(Test t){t.test();}
}
interface Test{abstract void test();
}

eg:实现一个按钮的点击事件监听器

Object obj = new InnerClass(){};

枚举

枚举是一种特殊的类,默认被final修饰,继承于java.lang.Enum

用于定义一组常量(枚举项),默认被static final修饰

枚举项声明时都是唯一的,且可以通过枚举名访问,

枚举项被定义为枚举类的实例.

枚举类有且仅有一个构造方法,所以如果创建了带参构造方法,必须要给枚举项添加参数

枚举的作用

1,限制变量的取值范围

2,提高代码的可读性和可维护性

3,代替常量集合

4,实现单例模式

eg:

public enum Day {// 枚举项 : 被定义为枚举类的实例,原理就是⾃定义常量MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY}

枚举默认继承Enum类,本质为被final修饰的类

默认被public static final修饰

第一行只能为枚举项,均为常量,且每个常量记住的都是枚举类的一个对象

构造函数只能私有

泛型

一种编程语言特性,允许在定义类和接口或者方法时使用参数化类型

通过使用泛型可以在编译时就检测类型,避免运行时类型错误

通常用在Java的集合类里指定集合中元素类型,提高代码的类型安全性

注意:泛型不支持多态,必须传入完全相同类型

泛型类和泛型接口

在类名后添加<类型参数>,可以在类的成员变量或者方法等地使用

eg: class Test< T >{

​ public test(T input){

}

}

接口同理

泛型方法

在修饰符和返回值类型中间添加<类型参数>

可以在方法的各处使用

通配符

一种特殊的类型参数: ? 表示一种未知的类型

用以处理不确定的类型或者未知类型的情况,让我们的代码更加灵活,处理不同类型的对象和集合

同时提供一定安全性

1,无界通配符:?

匹配任意类型的参数

List<?> list

2,有界通配符:
? extends T

上界通配符:限制在T及T的子类类型

将T作为类型的上界

? super T

下界通配符:限制在T及T的父类类型

将T作为类型的下界

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

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

相关文章

人脸识别seetaface6 windows + cmake + vs编译,踩坑指南

遇到问题冷静分析&#xff0c;没有解决不了的问题&#xff0c;只是需要时间。与君共勉 环境准备 要在windows 上编译c 源码&#xff0c;需要准备如下软件。省去了详细的安装过程。 visual studio 2022 (社区免费版链接)mingw64 下载路径 (安装后&#xff0c;记得添加系统路径…

elementui 实现一个固定位置的Pagination(分页)组件

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、 elementui 实现一个固定位置的Pagination&#xff08;分页&#xff09;组件 文章目录 系列文章目录…

今客CRM客户管理系统 v17.3

简介&#xff1a; 今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发&#xff0c;通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作&#xff0c;用户通过自定义字段类型可以达到适合不同企业的需求。在今客客户关系管理系统中管理…

【子集回溯】【树枝+树层去重】Leetcode 491. 非递减子序列

【组合回溯】【树枝树层去重】Leetcode 491. 非递减子序列 解法1 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 【树层去重】&#xff1a;如果在同层元素重复(这里无法排序&#xff0c;所以无法使用之前的flag&a…

Making Anti-Palindromes

题目链接 Codeforces Round 867 (Div. 3) E. Making Anti-Palindromes 挺好的一道鸽巢原理题。 思路&#xff1a; 贪心地来想&#xff0c;我们没必要动本来就不同的一对&#xff0c;而对相同的对&#xff0c;我们可以让它们互相之间进行交换&#xff0c;这样一次交换就可以…

HarmonyOS 应用开发之启动远程PageAbility(仅对系统应用开放)

启动远程PageAbility同样通过featureAbility中的startAbility接口实现。 除引入’ohos.ability.featureAbility’外&#xff0c;还需引入’ohos.distributedHardware.deviceManager’&#xff0c;通过DeviceManager&#xff08;该组件提供帐号无关的分布式设备的认证组网能力&…

鸿蒙南向开发实战:【智能窗帘】

样例简介 智能窗帘设备不仅接收数字管家应用下发的指令来控制窗帘开启的时间&#xff0c;而且还可以加入到数字管家的日程管理中。通过日程可以设定窗帘开关的时间段&#xff0c;使其在特定的时间段内&#xff0c;窗帘自动打开或者关闭&#xff1b;通过日程管家还可以实现窗帘…

蓝桥杯备考

目录 P8823 [传智杯 #3 初赛] 期末考试成绩 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码 P8828 [传智杯 #3 练习赛] 直角三角形 题目描述 输入格式 输出格式 输入输出样例 代码 P8833 [传智杯 #3 决赛] 课程 题目背景 题目描述 输入格式 输出格式…

redis---位图Bitmap和位域 Bitfield

位图是字符串类型的拓展&#xff0c;可以使用一个string类型来模拟一个Bit数组。数组的下标就是偏移量&#xff0c;值只有0和1&#xff0c;也支持一些位运算&#xff0c;比如与或非&#xff0c;异或等等&#xff0c;它们的应用场景非常广泛比如可以用来记录用户的签到情况&…

dict类型如何保存为json数据,给一个python示例代码

dict类型如何保存为json数据&#xff0c;给一个python示例代码 import json# 假设我们有一个字典对象 data_dict {"name": "Alice","age": 30,"city": "Wonderland" }# 将字典转换为JSON格式的字符串 json_string json.d…

代码随想录一刷总结(待更新)

文章目录 代码随想录一刷总结数组篇二分查找双指针用法 链表篇哈希表篇字符串篇栈与队列篇二叉树篇回溯篇贪心篇动态规划篇 代码随想录一刷总结 数组篇 二分查找 最重要的是循环不变量原理 区间定义 left right 时有没有意义&#xff0c;取决于开区间还是闭区间 使用场景…

Qt中继承QCheckBox的类结合QTableWidget实现多选并且每个多选的id都不一样

1.相关描述 继承QCheckBox的类MyCheckBox&#xff0c;利用QTableWidget的setCellWidget方式添加MyCheckBox类的对象 2.相关页面 3.相关代码 mycheckbox.h #ifndef MYCHECKBOX_H #define MYCHECKBOX_H#include <QCheckBox> #include <QObject>class MyCheckBox : pu…

力扣刷题Days31-2.两数相关(js)

1&#xff0c;题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;…

Vue3:Pinia简介及环境搭建

一、简介 Pinia是Vue3中的状态管理工具&#xff0c;类似与Vue2中的Vuex框架的作用 二、环境搭建 1、安装 npm install pinia2、配置 main.ts import {createApp} from vue import App from ./App.vue // 第一步&#xff1a;引入pinia import {createPinia} from piniacons…

Nginx - directory index of “/usr/share/nginx/html/“ is forbidden

问题描述 安装完 Nginx 之后访问本机 IP&#xff0c;结果直接报错&#xff0c;然后去查看 Nginx 错误日志&#xff0c;看到如下错误信息&#xff0c;意思是 html 下面没有 directory index of "/usr/share/nginx/html/" is forbidden 解决方案 Q1&#xff1a;如果在…

zabbix源码安装

目录 一.安装php和nginx客户端环境 二.修改php配置 三.修改nginx配置文件 四.下载并编译zabbix 五.创建zabbix需要的用户及组 六.安装编译需要的依赖 七.配置zabbix文件 八.数据库配置 九.配置zabbix 十.web界面部署 十一.遇到无法创建配置文件 十二.登录zabbix 前…

C# OAuth单点登录的实现

原理 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种身份验证技术&#xff0c;它允许用户使用一组凭据&#xff08;如用户名和密码&#xff09;登录多个相关但独立的系统&#xff0c;而无需在每个系统中都进行登录操作。下面是一个简单的SSO实现示…

[Python学习篇] Python简介

介绍 Python&#xff08;意为大蟒蛇&#xff09;由荷兰国家数学与计算机科学研究中心的吉多范罗苏姆于1990年代初设计&#xff0c;作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及…

2014最新AI学法减分交管12123小程序源码最新玩法

2014最新AI学法减分交管12123小程序源码最新玩法利用ChatGPT实现拍照搜题 利用ChatGPT实现拍照搜题 学法减分这个项目是几年之前的项目&#xff0c;老朋友都知道&#xff0c;以前我用Python实现了向量检索&#xff0c;也就是当时和大家说到的AI题库&#xff0c;那时候国内还没…

鸿蒙实战开发:【实现应用悬浮窗】

如果你要做的是系统级别的悬浮窗&#xff0c;就需要判断是否具备悬浮窗权限。然而这又不是一个标准的动态权限&#xff0c;你需要兼容各种奇葩机型的悬浮窗权限判断。 fun checkPermission(context: Context): Boolean if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)…