尚硅谷 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、接口实际上看作一种规范
面试题: 抽象类与接口 有哪些异同?
相同点
- 都不能被实例化
- 抽象类和接口都不能直接创建对象,必须通过子类(实现类)来实例化。
- 都可以包含抽象方法
- 抽象方法没有方法体,子类或实现类必须重写它们。
- 都用于定义类的行为规范
- 它们都用于约束子类,使子类遵循一定的设计规则。
不同点**
| 比较项 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 成员 | 既可以有抽象方法,也可以有普通方法和成员变量 | 只能有抽象方法(Java 8+ 可有 default 方法和 static 方法) |
| 构造方法 | 可以有构造方法 | 不能有构造方法 |
| 变量 | 允许有普通成员变量 | 变量默认是 public static final(常量) |
| 访问修饰符 | 方法可以是 public、protected、default,甚至 private | 方法默认是 public,不能有 private 或 protected |
| 多继承 | 只能继承一个抽象类(单继承) | 可以实现多个接口(多继承) |
| 使用场景 | 适用于具有“is-a”关系的类(比如“动物是一种生物”) | 适用于“能做什么”的功能规范(比如“可飞行的对象”) |
6-7 类的内部成员之五:内部类
1、在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类
2、内部类的分类: 成员内部类 vs 局部内部类(方法内、代码块内、构造器内)
3、成员内部类:
一方面,作为外部类的成员:
>调用外部类的结构
>可以被static 修饰
>可以被四种不同的权限修饰
另一方面,作为一个类:
>类内可以定义属性、方法、构造器等
>可以被 final 修饰(言外之意:不被 final 修饰可以被继承)
>可以被 abstract 修饰
4、关注如下三个问题
一、如何实例化成员内部类的对象

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

着重看一下三者调用的格式
三、开发中,局部内部类的使用

总结
今日学习内容比较多,也有一定重叠,注意区分各部分的内容,重点主要在于接口和抽象类,内部类使用的频次比较少。
今日箴言:
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 支持的所有平台配置选项:…...
【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(主成分分析…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
