Java进阶04 final关键字、abstract抽象、interface接口、JDK8与JDK9中接口的区别、内部类和匿名类
文章目录
- 一、final关键字
- 二、abstract关键字
- 三、接口interface
- 四、JDK8和JDK9中接口的区别
- 五、内部类
一、final关键字
final可以修饰类、方法、变量
用final修饰类 表示此类不能被继承
用final修饰方法 表示方法不可以被重写
用final修饰变量 既可以修饰成员变量也可以修饰局部变量,代表着此时的变量变成了常量,一旦赋值,无法修改
定义的时候必须要指定初始值
final和static进行搭配
俩个合在一起修饰成员变量的时候就称为此成员变量是全局常量
二、abstract关键字
包含抽象方法的类一定是抽象类
抽象方法就是没有方法体的方法
抽象类不能实例化,抽象类中包含构造器的,子类对象实例化需要直接或间接调用父类的构造器的
抽象类中可以没有抽象方法,但是抽象方法一定要在抽象类中
抽象方法只有方法的声明没有方法体
抽象方法的功能是确定的,只是不知道如何具体实现
子类必须重写父类的所有抽象方法之后,才可以使用,否则这个子类依然是个抽象类
不能用abstract修饰私有方法、静态方法、final修饰的方法、final修饰的类
三、接口interface
接口的本质是契约、标准、规范,就像法律一样,人人都要遵守
接口的内部可以声明属性,但是必须使用public ststic final 修饰 默认的 可以省略
也可以声明方法,jdk8之前修饰为public abstract 也是默认的可以省略
jdk8声明静态方法、默认方法
jdk9声明私有方法
不可以声明构造器和代码块
接口和类之间是实现关系
类可以实现多个接口
类针对接口的多实现,一定程度上就弥补了类的单继承的局限性
类必须将实现的接口的抽象方法全部都重写,才可以实例化,否则必须标为抽象类
接口和接口之间可以有继承关系,而且可以多继承
接口具有多态性
接口名 变量名 = new 实现类对象
多态性演示实例
package org.example;public class UsbTest {public static void main(String[] args) {Computer computer = new Computer();USB usb=new Printer();computer.transferData(usb);}
}
class Computer{public void transferData(USB usb){System.out.println("设备连接成功");usb.start();System.out.println("数据传输");usb.stop();}
}class Printer implements USB{public void start() {System.out.println("打印机开始打印");}public void stop() {System.out.println("打印机停止打印");}
}interface USB{void start();void stop();
}
抽象类和接口的区别
相同点:
都可以声明抽象方法
都不能实例化
不同点:
抽象类一定有构造器,接口没有构造器
类与类之间是继承关系,接口与类之间是实现关系,接口与接口之间是多继承关系
如果抽象类和接口都可以使用的话,优先用接口,避免单继承的局限性
四、JDK8和JDK9中接口的区别
1、接口中声明的静态方法只能被接口来调用,不能使用实现类调用
2、接口中声明的默认方法,可以被实现类继承,实现类在没有重写此方法的情况下,默认调用接口中声明的默认方法,如果重写了则调用重写的方法
默认方法用default修饰
public default void method(){
]
3、类实现了两个接口,而两个接口中定义了同名同参数的默认方法,则实现类没有重写此两个接口默认方法的情况下报错,必须要重写同名同参数的方法
4、子类继承了父类并实现了接口,父类和接口中声明了同名同参数的方法,其中接口中的方法是默认的方法,默认情况下子类在没有重写此方法的情况下调用的是父类中的方法(类优先原则)
5、如何在子类中调用父类或接口中被重写的方法,直接用函数名调用
JDK9中可以定义私有方法,私有方法实现类看不到也用不了,就是只能给自己用
五、内部类
内部类就是A定义在类B里面,A就是内部类,B就是外部类
使用内部类遵循了高内聚低耦合的开发原则
常用的例子,Thread类内部声明了State类,表示线程的生命周期
HashMap类中声明了Node类,表示封装的key和value
内部类的分类:
成员内部类:直接声明在外部类的里面,使用static修饰的是静态的成员内部类,没使用就是非静态的成员内部类
局部内部类:声明在方法内、构造器内、代码块内的内部类,分为匿名的局部内部类和非匿名的局部内部类
内部类的内部可以声明属性、方法、构造器、代码块、内部类等结构
内部类可以声明父类也可以实现接口
可以使用final修饰 可以使用abstract修饰
对于外部类而言,内部可以调用外部类的结构,比如属性、方法等
除了使用public修饰、缺省权限修饰外,还可以用private protected修饰
可以使用static修饰
用Person.this.name调用外部类的相同变量名的变量
加了大括号代表的是继承于该类的一个子类
//匿名类new Object() {public void test() {System.out.println("hello");}}.test();
相关文章:
Java进阶04 final关键字、abstract抽象、interface接口、JDK8与JDK9中接口的区别、内部类和匿名类
文章目录 一、final关键字二、abstract关键字三、接口interface四、JDK8和JDK9中接口的区别五、内部类 一、final关键字 final可以修饰类、方法、变量 用final修饰类 表示此类不能被继承 用final修饰方法 表示方法不可以被重写 用final修饰变量 既可以修饰成员变量也可以修饰…...
Python的web自动化学习(五)Selenium的隐式等待(元素定位)
引言: WebDriver隐式等待是一种全局性的等待方式,它会在查找元素时设置一个固定的等待时间。当使用隐式等待时,WebDriver会在查找元素时等待一段时间,如果在等待时间内找到了元素,则立即执行下一步操作;如果…...
20231102从头开始配置cv180zb的编译环境(欢迎入坑,肯定还有很多问题等着你)
20231102从头开始配置cv180zb的编译环境(欢迎入坑,肯定还有很多问题等着你) 2023/11/2 11:31 (欢迎入坑,本篇只是针对官方的文档整理的!只装这些东西你肯定编译不过的,还有很多问题等着你呢&…...
CentOS 安装HTTP代理服务器 Squid
参考:大部分摘自此文,做了少部分修改 Squid 是一个功能全面的缓存代理服务器,它支持著名的网络协议像 HTTP,HTTPS,FTP 等等。将 Squid 放在网页服务器的前端,通过缓存重复请求,过滤网络流量等&…...
ubuntu下开发提效的小tips
一、常用操作使用简写的别名,写进bashrc文件中 背景:经常需要cd至某个文件夹中,然后再执行对应的操作;写进bashrc文件中后,可以直接用缩略命令替代这一连串的命令; 用到的工具: 设置命令别名a…...
Java反射详解:入门+使用+原理+应用场景
反射非常强大和有用,现在市面上绝大部分框架(spring、mybatis、rocketmq等等)中都有反射的影子,反射机制在框架设计中占有举足轻重的作用。 所以,在你Java进阶的道路上,你需要掌握好反射。 怎么才能学好反射,我们需要…...
PostgreSQL 工具的相关介绍
1.1 psql工具 psql是PostgreSQL中的一个命令行交互式客户端工具,类似 Oracle中的命令行工具sqlplus,它允许用户交互地键入SQL语句或命 令,然后将其发送给PostgreSQL服务器,再显示SQL语句或命令的结 果。 1.2 psql的简单使用 使用…...
结合组件库实现table组件树状数据的增删改
如图所示,可以实现树状数据的新增子项,新增平级,删除。主要用到了递归 代码: <template><el-table :data"tableData" style"width: 100%; margin-bottom: 20px" row-key"id" border def…...
Microsoft 365 管理自动化
Microsoft 365 服务被大多数组织广泛使用,每天生成的数据量巨大。解决 Microsoft 365 中的问题可能非常困难,并且使用多个管理中心来保护组织变得复杂。本机控制台还缺少某些批量管理任务、全面的审计报告和基于角色的精细访问控制。 Microsoft 360 管理…...
unraid 安装并设置 zerotier 内网穿透安装 unraid 局域网内其他设备
Read Original 最近看了以下两个文章,感谢发布的各种精彩文章,让我受益匪浅。OPENWRT 的固件在设置了,【自动允许客户端 NAT】后,可以直接访问局域网其他设备,而我 unraid 部署 zerotier 后,只能访问 unra…...
如何调试 Dubbo 协议调用过程
微服务架构下的快速交付、灵活部署等优势使得 Dubbo 协议已成为了当今互联网基础建设里的一大热点。 Dubbo 协议是一款由阿里巴巴开发并开源的一款高性能 Java RPC 框架,凭借着高效的远程调用、服务注册与发现、灵活的配置等特点,在微服务后端开发场景中…...
C++初阶 类和对象(上)
前言:C初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C初阶系列会持续更新,上学期间将不定时更新,但总会更的 目录 一、什么是面向对象编程 二、什么是类和如…...
SoftwareTest4 - 咋设计一个好的测试用例
咋设计一个好的测试用例 一 . 设计测试用例的万能公式功能测试性能测试界面测试兼容性测试易用性测试安全测试案例案例1 : 对水杯设计测试用例案例 2 : 对登录页面设计测试用例 二 . 具体设计测试用例的方法2.1 等价类等价类的概念等价类的用例编写 2.2 边界值2.3 判定表2.4 场…...
自定义 Spring Boot Starter 组件
自定义 Spring Boot Starter 组件是为了封装和简化特定功能的配置和集成,让用户能够更容易地集成你提供的库或功能。Spring Boot Starter 组件通常包括自动配置、依赖管理和必要的配置。 下面是创建一个简单的 Spring Boot Starter 的基本步骤: 步骤&a…...
功率放大器的种类和作用是什么
功率放大器是一种电子设备,用于将输入信号的功率增加到更高的水平,以驱动负载或输出设备。功率放大器广泛应用于各种领域,包括通信、音频、无线电频谱分析、激光器和雷达等。 根据应用需求和工作原理不同,功率放大器可分为几种不同…...
分析外贸SEO推广流程?网站谷歌SEO优化方法?
外贸SEO推广详细教程?外贸企业站如何做谷歌SEO推广? 外贸SEO推广是国际贸易领域中的一项重要战略,通过优化网站内容和结构,提高搜索引擎排名,从而增加在线可见性,吸引更多国际客户。顺风船将深入分析外贸S…...
前端工程化需要知道的一些知识
## 前端的概念 前端开发的产出是直接面向用户的 软技能:用户体验(性能) 编程技能: css: 综合实践能力、常见兼容hack html: 遵循w3c规范的语义化结…...
默认路由配置
默认路由: 在末节路由器上使用。(末节路由器是前往其他网络只有一条路可以走的路由器) 默认路由被称为最后的关卡,也就是静态路由不可用并且动态路由也不可用,最后就会选择默认路由。有时在末节路由器上写静态路由时…...
Annotorious入门教程:图片注释工具
本文简介 最近有工友问我前端怎么给图片做标注。使用 Fabric.js 或者 Konva.js 等库确实可以实现,但我又好奇有没有专门做图片标注的工具呢? 在网上搜了一下发现 Annotorious 可以实现这个功能。Annotorious 提供了图片注释和标注功能,而且…...
一台服务器是否能够安装多个SSL证书?
在今天的互联网世界中,网络安全是至关重要的,而SSL证书是为了保护网络通信安全而设计的加密协议。然而,对于一台服务器是否能够安装多个SSL证书这个问题,仍然存在一些疑问。本文将探讨这个问题,并提供一些相关的解析和…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
