当前位置: 首页 > news >正文

尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类

6-5 抽象类(abstract)与抽象方法(important)


一、什么叫抽象类:

有时候将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类称为抽象类

abstract关键字的使用:

​ 1、abstract:抽象的

​ 2、abstract 可以修饰的结构:类和方法

​ 3、abstract 修饰类: 抽象类

​ >此类不能实例化

​ >类中仍然提供构造器,以便子类调用 (只要是类,一定会有构造器)

​ >开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作

包含抽象方法的类 一定是一个抽象类。反之,抽象类中可以没有抽象方法

​ 4、abstract 修饰方法:抽象方法

​ >只有方法的声明,没有方法体

​ >包含抽象方法的类 一定是一个抽象类。反之,抽象类中可以没有抽象方法

​ >若子类重写了父类中的所有的抽象方法后,则此子类方可实例化;

​ >若子类没有重写父类中所有的抽象方法,则此子类也是一个抽象类,需要使用 abstract 修饰

抽象类的格式 例如:

public abstract void eat();

abstract 的使用上的注意点:

1、不能用来修饰:属性、构造器等结构

2、abstract 不能用来修饰私有方法、静态方法、final 的方法、final 的类


抽象类的应用:模版方法的设计模式


6-6 接口(Interface):概述


接口的使用:

1、接口使用 interface 来定义

2、Java 中,接口和类是并列的两个结构

3、如何定义接口:定义接口中的成员

​ 3.1 JDK7 及以前:只能定义全局常量和抽象方法

​ >全局常量:public static final 的 (但是在编写代码的时候可以省略不写)

​ >抽象方法:Public abstract 的

​ 3.2 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(default)

​ >接口中定义的静态方法,只能通过接口去调用

​ >通过实现类的对象,可以调用接口中的默认方法;如果实现类重写了接口中的默认方法,调用时,调用重写后的方法

​ >如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用父类中的同名同参的方法–>类优先原则

​ >如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,报错—>接口冲突

​ >如何在子类(或实现类)的方法中调用父类、接口中被重写的方法 主要利用 super

4、接口中不能定义构造器!!! 意味着接口不可以实例化

5、java 开发中,接口都通过让类去实现(implement)的方式来使用

​ 如果实现类覆盖了 接口中的所有的抽象方法,则此实现类可以实例化

​ 如果实现类没覆盖接口的所有的抽象方法,则此实现类仍为一个抽象类

6、Java 类可以实现多个接口 —>弥补了 Java 单继承性的局限性

​ 格式:class AA extends BB implements CC DD EE {}

7、接口之间 可以继承,而且 可以多继承

8、接口的具体使用,体现多态

9、接口实际上看作一种规范


面试题: 抽象类与接口 有哪些异同?

相同点
  1. 都不能被实例化
    • 抽象类和接口都不能直接创建对象,必须通过子类(实现类)来实例化。
  2. 都可以包含抽象方法
    • 抽象方法没有方法体,子类或实现类必须重写它们。
  3. 都用于定义类的行为规范
    • 它们都用于约束子类,使子类遵循一定的设计规则。
不同点**
比较项抽象类接口
关键字abstract classinterface
成员既可以有抽象方法,也可以有普通方法和成员变量只能有抽象方法(Java 8+ 可有 default 方法和 static 方法)
构造方法可以有构造方法不能有构造方法
变量允许有普通成员变量变量默认是 public static final(常量)
访问修饰符方法可以是 publicprotecteddefault,甚至 private方法默认是 public,不能有 privateprotected
多继承只能继承一个抽象类(单继承)可以实现多个接口(多继承)
使用场景适用于具有“is-a”关系的类(比如“动物是一种生物”)适用于“能做什么”的功能规范(比如“可飞行的对象”)


6-7 类的内部成员之五:内部类


1、在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类

2、内部类的分类: 成员内部类 vs 局部内部类(方法内、代码块内、构造器内)

3、成员内部类:

​ 一方面,作为外部类的成员:

​ >调用外部类的结构

​ >可以被static 修饰

​ >可以被四种不同的权限修饰

​ 另一方面,作为一个类:

​ >类内可以定义属性、方法、构造器等

​ >可以被 final 修饰(言外之意:不被 final 修饰可以被继承

​ >可以被 abstract 修饰

4、关注如下三个问题

​ 一、如何实例化成员内部类的对象

IMG_0033

​ 二、如何在成员内部类中区分调用外部类的结构

IMG_0035

着重看一下三者调用的格式

三、开发中,局部内部类的使用

IMG_0037



总结

今日学习内容比较多,也有一定重叠,注意区分各部分的内容,重点主要在于接口和抽象类,内部类使用的频次比较少。
今日箴言:
This society is not friendly to introverted people.Don’t let laziness and procrastination imprision your free soul.

(这个社会对内向的人并不友好,不要被懒惰和拖延禁锢你自由的灵魂)

ps:今日看了国足 u20 比赛,1-2 输给了澳大利亚,机会也挺多,可惜没把握住,两个丢球都是自己的失误被打反击产生的,同时两个丢球间隔不到两分钟,这就和生活一样,挫折有时候总是接踵而至,可能一个打击让你还没回过神,下一个又来了,所以遇到挫折的时候不要走神,正视挫折,并不断去战胜它,不然确实很容易被接二连三的挫折打垮!

相关文章:

尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类

6-5 抽象类(abstract)与抽象方法(important) 一、什么叫抽象类: 有时候将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类称为抽象类 abstract关键字的使用: ​ 1、abstract:抽象的 ​ 2、abs…...

机器学习数理基础:从概率到梯度下降的全面解析

一、引言:为什么需要数理基础? 机器学习是数据与算法的艺术,而数学是其背后的语言。无论是理解模型原理、优化算法,还是解决实际问题,扎实的数理基础都是必不可少的。本文将从概率论、线性代数、微积分三大核心领域出发…...

数据结构:哈希

哈希函数的概念:哈希函数是哈希表(散列表)的核心组件,其作用是将任意长度的键(Key)映射为固定长度的存储地址,以实现高效的数据存储与检索。以下是哈希函数在数据结构中的关键知识点总结&#x…...

Openssl交叉编译

在 OpenSSL 交叉编译中,linux-aarch64是一个用于指定目标平台的配置选项,表示目标是 X86 架构的 64位系统。这个选项可以从 OpenSSL 的 ./Configure 命令支持的平台列表中获取。 你可以通过运行以下命令查看 OpenSSL 支持的所有平台配置选项&#xff1a…...

【linux】更换ollama的deepseek模型默认安装路径

【linux】更换ollama的deepseek模型默认安装路径 文章目录 【linux】更换ollama的deepseek模型默认安装路径Ollama 默认安装路径及模型存储路径迁移ollama模型到新的路径1.创建新的模型存储目录2.停止ollama3.迁移现有模型4.修改 Ollama 服务配置5.重启ollama6.验证迁移是否成功…...

组合模式详解(Java)

一、组合模式基本概念 1.1 定义与类型 组合模式是一种结构型设计模式,它通过将对象组织成树形结构,来表示“部分-整体”的层次关系。这种模式使得客户端可以一致地对待单个对象和组合对象,从而简化了客户端代码的复杂性。组合模式的核心在于定义了一个抽象组件角色,这个角…...

蓝桥杯单片机基础部分——单片机介绍部分

前言 这个部分是额外的,我看我有的学弟学妹基础比较差,对板子上面的模块不太熟悉,这里简单的介绍一下 蓝桥杯单片机 这个就是蓝桥杯单片机的板子,它的主控芯片是(IAP15F2K61S2),这里就对他常用…...

如何简单的去使用jconsloe 查看线程 (多线程编程篇1)

目录 前言 1.进程和线程 进程 PCB 的作用 并发编程和并行编程 线程 为什么选择多线程编程 2.在IDEA中如何简单创建一个线程 1. 通过继承Thread类 2. 通过实现 Runnable 接口 3. 使用 Lambda 表达式 3.如何简单使用jconsloe去查看创建好的线程 前言 2025来了,这是第…...

python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件(openpyxl库)三、 处理 Word 文件(python-docx库)四、 处理 PPT 文件(python-pptx库)五、 自动发送邮件(smtplib和…...

DeepSeek教unity------Dotween

1、命名法 Tweener(补间器):一种控制某个值并对其进行动画处理的补间。 Sequence(序列):一种特殊的补间,它不直接控制某个值,而是控制其他补间并将它们作为一个组进行动画处理。 Tw…...

前端开发中关于虚拟列表的实现与应用优化

前端开发中关于虚拟列表的实现与应用优化 一、引言 在前端开发的日常工作中,我们常常会遇到需要展示大量数据列表的场景。比如电商平台的商品列表、社交平台的动态信息流等。当数据量庞大时,直接渲染所有数据会导致页面性能急剧下降,出现卡…...

图解JVM-1. JVM与Java体系结构

一、前言 在 Java 开发的广袤天地里,不少开发者都遭遇过令人头疼的状况。线上系统毫无征兆地卡死,陷入无法访问的僵局,甚至直接触发 OOM(OutOfMemoryError,内存溢出错误);面对 JVM 的 GC&#…...

Word中的文档信息域

Word中的文档信息域 DocProperty包含文档信息的多个属性, 也可以自定义属性. 查看文档预定义的自定义属性 【文件】→【信息】→【属性】→【高级属性】 参考链接 WORD中文档属性域DocProperty的应用-CSDN博客 第06套 Word_哔哩哔哩_bilibili...

Linux中的权限问题(二)

一、不受权限约束的root 按照文件的使用者进行匹配后,即使权限是“---” root依旧可以正常进行读,写,运行 二、文件拥有者和所属组的更改方法以及限制 2.1chown:更改文件拥有者以及所属组 ①可以单独修改文件拥有者 chown[更…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十八节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析(ResponseOnEvent_0x86服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x86服务、事件响应、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x86…...

Spring Boot自动装配:约定大于配置的魔法解密

#### 一、自动装配的哲学思考 在传统Spring应用中,开发者需要手动配置大量的XML或JavaConfig。Spring Boot通过自动装配机制实现了**约定大于配置**的设计理念,其核心思想可以概括为: 1. **智能预设**:基于类路径检测自动配置 2…...

[笔记.AI]大模型的蒸馏、剪枝、量化 | 模型压缩 | 作用与意义

上周简单整理了《deepseek-r1的不同版本(满血版、蒸馏版、量化)》,这次继续完善对其的认知——补充“剪枝”,并进一步整理蒸馏、剪枝、量化的作用与意义。 以下摘自与DeepSeek-R1在线联网版的对话 蒸馏、剪枝、量化是当前主流的三…...

【koa】05-koa+mysql实现数据库集成:连接和增删改查

前言 前面我们已经介绍了第二阶段的第1-4点内容,本篇介绍第5点内容:数据库集成(koamysql) 也是第二阶段内容的完结。 一、学习目标 在koa项目中正常连接数据库,对数据表进行增删改查的操作。 二、操作步骤 本篇文章…...

【数据结构】队列(Queue)

Queue 定义 Java中的队列(Queue)是一种先进先出(FIFO)的数据结构。队列只允许在一段进行插入数据操作,称为入队,在另一端进行删除数据操作,称为出队。我们可以把队列形象看作为排队。在最前面的进行出队,从最后面进行入队。 队列…...

机器学习PCA和LDA

主成分分析(PCA, Principal Component Analysis)和线性判别分析(LDA, Linear Discriminant Analysis)是两种常用的降维方法,它们虽然都用于数据降维,但核心思想和应用场景不同。 PCA(主成分分析…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

云原生安全实战:API网关Kong的鉴权与限流详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块&#xff0…...

算术操作符与类型转换:从基础到精通

目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

PydanticAI快速入门示例

参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标: 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...