抽象类和接口(1)
抽象类:
什么是抽象类:
听着就很抽象,确实挺抽象,先来写一个抽象类感觉一下:
这就是抽象类!
在 Java 中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。
抽象类特点:
1. 抽象类不能直接实例化对象:
如果实例化抽象类就会报错!
2. 抽象方法不能是 private 的:
抽象方法和抽象类都不能被private修饰。(因为要在其他类中进行重写)
3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写:

这种情况都会报错!!
4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰:
1、子类必须重写父类的抽象方法:
2、子类也可以是抽象类
如果此时有子类继承了Dog类,那就需要既要重写Animals中抽象方法,和又要重写Dog中的抽象方法!!
其他特点:
5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
例如:
abstract class Animals {int age;String name;String color;public Animals(){System.out.println("Init class Animals");}public void run(){System.out.println("Aniamla run");}abstract public void barks();abstract public void eat();
}
抽象类的作用:
抽象类本身不能被实例化 , 要想使用 , 只能创建该抽象类的子类 . 然后让子类重写抽象类中的抽象方法 .
使用抽象类的场景就如上面的代码 , 实际工作不应该由父类完成 , 而应由子类完成 . 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的 . 但是父类是抽象类就会在实例化的时候提示错误 , 让我们尽早发现问题
接口:
语法规则:
接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。
例如:
public interface 接口名称 {// 抽象方法public abstract void method1 (); // public abstract 是固定搭配,可以不写public void method2 ();abstract void method3 ();void method4 ();// 注意:在接口中上述写法都是抽象方法,跟推荐方式 4 ,代码更简洁}
注意:
接口中的方法都是抽象方法:
public abstract 返回值类型 方法名();
可以简写为 返回值类型 方法名();
提示 :1. 创建接口时 , 接口的命名一般以大写字母 I 开头 .2. 接口的命名一般使用 " 形容词 " 词性的单词 .3. 阿里编码规范中约定 , 接口中的方法和属性不要加任何修饰符号 , 保持代码的简洁性
接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法。
接口特性:
public class TestUSB {public static void main ( String [] args ) {USB usb = new USB ();}}
public interface USB {// Error:(4, 18) java: 此处不允许使用修饰符 privateprivate void openDevice ();void closeDevice ();}
3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现。
(和抽象类是一样的)
public interface USB {void openDevice ();// 编译失败:因为接口中的方式默认为抽象方法// Error:(5, 23) java: 接口抽象方法不能带有主体void closeDevice (){System . out . println ( " 关闭 USB 设备 " );}}
4. 重写接口中方法时,不能使用默认的访问权限。
public class Mouse implements USB {@Overridevoid openDevice () {System . out . println ( " 打开鼠标 " );}// ...}// 编译报错,重写 USB 中 openDevice 方法时,不能使用默认修饰符// 正在尝试分配更低的访问权限 ; 以前为 public
5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
(和抽象类有区别)
public interface USB {double brand = 3.0 ; // 默认被: final public static 修饰void openDevice ();void closeDevice ();}public class TestUSB {public static void main ( String [] args ) {System . out . println ( USB . brand ); // 可以直接通过接口名访问,说明是静态的// 编译报错: Error:(12, 12) java: 无法为最终变量 brand 分配值USB . brand = 2.0 ; // 说明 brand 具有 final 属性}}
6. 接口中不能有静态代码块和构造方法。
public interface USB {// 编译失败public USB (){}{} // 编译失败void openDevice ();void closeDevice ();}

实现多个接口:
之前讲过一个类只能继承一个父类,但是一个类可以扩展多个接口,也就是可以implements多个接口!
我们可以实现一个动物类,然后提供多个接口,这些接口可以表示动物的特征!
一共定义3个接口,一个父类,两个子类:
接口:
父类:
子类:
注意定义时必须重写接口中的方法!!
注意扩展接口和继承父类的顺序,先继承后扩展!
利用多态输出:
再多定义一个类,可以进行多态的类!!(可以进行向上转型和向下转型!!)
这个类是重点,希望大家看懂!
public class Walk {public static void walk(IRun running){System.out.println("我去散步带着");if(running instanceof Cat) {Cat cat = (Cat) running;cat.name = "mimi";cat.age = 2;} else if(running instanceof Bird){Bird bird = (Bird) running;bird.name = "qiumi";bird.age = 1;}running.run();}
}
接口之间的继承:
类与类之间可以进行继承(用关键字extends),类与接口之间可以进行扩展(用关键字inplements),那么接口之间能不能进行继承呢?
答案肯定是能滴!
也是用关键字extends:
此时比如两个接口,一个是IFly和IRun两个接口,可以合并成一个接口,既可以跑也可以飞:
此时比如说,鸟类,可以直接调用一个接口就可以了!
public class Bird extends Animals implements IFlyrun{@Overridepublic void fly() {System.out.println(this.name+"用两只翅膀飞");}@Overridepublic void run() {System.out.println(this.name+"用两只脚跑");}
}
但是此时还是需要重写所有的接口中的抽象类!
抽象类和接口的区别:
1、抽象类还是类,里面还是可以定义成员变量和成员方法,而且这些变量和方法的访问限制可以自己更改。接口,里面的成员方法只能定义抽象方法,不能实现,成员变量也只能是常量,也就是被final修饰!
2、抽象类中的普通变量和方法可以被子类调用,不需要重写,但是接口中只能定义抽象类,而且,必须要被扩展它的子类重写!
3、类与类之间只能有一个父类,但是多个接口可以被一个类拓展!
(自己总结的不知道到不到位,如有不对,请多多指正。)
相关文章:

抽象类和接口(1)
抽象类: 什么是抽象类: 听着就很抽象,确实挺抽象,先来写一个抽象类感觉一下: 这就是抽象类! 在 Java 中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法…...
epoll内核原理与实现详解
目录 1 epoll相关理论基础 1.1 I/O多路复用技术 1.2 事件驱动模型 1.2.1 基本概念 1.2.2 优缺点分析 1.2.3 与epoll的关联 1.3 epoll机制简介 1.3.1 核心原理 1.3.2 优点 2 epoll内核原理 2.1 epoll数据结构 2.1.1 主要数据结构 2.1.2 数据结构关系 2.2 epoll工作…...

被低估的SQL
SQL是现代数据库管理系统中不可或缺的一部分。尽管它的使用已十分普遍,但在数据处理领域,SQL的某些功能和潜力仍然被许多人低估。接下来,小编将与您一起,探讨SQL的一些被忽视的特性,揭示它在数据管理中的真正实力。 1.…...
数字证书、数字签名及其关系
一.数字证书与数字签名 1.数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。简单地说,数字证书是一段包含用户身份信息、用户公钥信息以及份验证机构数字签名的数据。 通俗理解:数字证书相当于【身份证】 —— 确认你…...

一文读懂:如何将广告融入大型语言模型(LLM)输出
本文是我翻译过来的,讨论了在线广告行业的现状以及如何将大型语言模型(LLM)应用于在线广告。 原文请参见”阅读原文“。 在2024年,预计全球媒体广告支出的69%将流向数字广告市场。这个数字预计到2029年将增长到79%。在Meta的2024…...
godotenv拜读
简介 应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。 但是在实际开发中,如果同一台机器运行多个项目,设置环境变量容易冲突,不实用。godotenv库从.env文件中读取配置,…...

解析REST API与OpenAPI之差异:避免混淆
在网络API领域,常提及的两种术语为Rest API与Open API,其既存在差异亦存在联系。前者是一种API设计方式,后者则是一种API描述及定义规范。值得注意的是,OpenAPI 可用于描述和定义REST API。 什么是REST API? REST API …...

一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么
java 过虑器 、拦截器 、监听器的区别? 实现原理: 过滤器基于函数回调实现。拦截器基于Java的反射机制实现。监听器用于监听特定事件的发生,并作出相应处理。 使用范围: 过滤器依赖于Tomcat等容器,主要用于Web程序。拦截…...

本体映射与本体集成
文章目录 本体映射与本体集成本体映射分类知识挖掘是从己有的实体及实体关系出发挖掘新的知识,具体包括知识内容挖掘和知识结构挖掘。 本体映射与本体集成 解决本体异构的通用方法是本体集成与本体映射。本体集成直接将多个本体合并为一个大本体,本体映射则寻找本体间的映射…...

华媒舍:10种提升推特大V发文推广曝光率的方式
在社交媒体时代,推特已成为许多大V达到更广泛受众的重要渠道。并非所有的推文都能获得理想的曝光率。为了帮助大V们提升推文的曝光率,本文将介绍10种有效的方式。 1. 精心构思内容 好的内容是吸引读者和提升曝光率的关键。大V们应该从听众的角度出发&am…...
前端本地存储数据:深入解析与代码示例(Cookie、LocalStorage、SessionStorage和IndexedDB)
在现代Web应用中,前端本地存储是实现用户个性化体验的关键技术。本文将深入探讨前端本地存储的四种主要技术:Cookie、LocalStorage、SessionStorage和IndexedDB,并提供具体的代码示例。 Cookie 简介 Cookie是由服务器创建并存储在用户浏览…...
Java语言程序设计基础篇_编程练习题*18.21 (将十进制数转换为二进制数)
*18.21 (将十进制数转换为二进制数) 编写一个递归方法,将一个十进制数转换为一个二进制数的字符串。方法头如下: public static String dec2Bin(int value)编写一个测试程序,提示用户输入一个十进制数,然后显示等价的二进制数。 代码示例 …...

中年转行新可能:18 个月迈向大模型提示词工程师
【导读】 人到中年,想半路转行成为大模型提示词工程师,这可行吗?最近,一位国外小哥成功转行,他在一篇干货满满的硬核博客中给出了答案:完全可行! 转行成为大模型提示词工程师,到底…...
C++通过返回值和输出参数的原理是什么?分别有什么优势和缺点?
C中,通过返回值和输出参数(通常是通过引用或指针)是函数与外部世界交换数据的两种主要方式。它们各自有着不同的原理和优缺点。 通过返回值 原理: 当函数通过返回值向调用者传递数据时,它实际上是在函数执行完毕后&…...

AI客服机器人开启企业客户服务新纪元
随着人工智能(AI)技术的迅猛发展,使得AI客服机器人走进了我们的视野,成为提高客户满意度和业务效率的不二法宝。这些智能机器人不仅能够处理海量信息,还能为客户提供个性化的服务体验。 一、AI客服机器人的基本原理 AI客服机器人是基于人工智…...

TPM项目课题的确定需要考虑哪些因素?
确定一个合适的TPM项目课题,是企业启动并成功实施TPM计划的第一步。这一过程不仅需要深入洞察企业现状,还需前瞻性地规划未来发展。详情如深圳天行健精益化生产管理咨询公司下文所述: 一、企业战略目标 1.与企业长期发展规划的契合度 -TPM项…...
Rust 数据类型
文章目录 发现宝藏1. 标量类型1.1 整型1.2 浮点型1.3 布尔型1.4 字符型 2. 复合类型2.1 元组2.2 数组 3. 总结 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Rust 是一种静态…...
C#无标题栏窗体拖动
要实现C#无标题栏窗体的拖动功能,可以通过以下步骤实现: 在窗体的构造函数中添加以下代码,以去掉标题栏: this.FormBorderStyle FormBorderStyle.None;然后,添加以下代码以处理鼠标按下事件: private c…...
MySQL容器配置连接数数,镜像重启生效
若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 方法一 在 docker-compose.yml 中配置 MySQL 的连接数,可以通过环境变量或配置文件来实现。以下…...

《OpenCV计算机视觉》—— 身份证号码识别案例
文章目录 一、案例实现的整体思路二、代码实现1.首先定义两个函数2.模板图像中数字的定位处理3.身份证号码数字的定位处理4.使用模板匹配,计算匹配得分,找到正确结果 一、案例实现的整体思路 下面是一个数字0~9的模板图片 案例身份证如下: 对…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...