【实现多个接口的使用】
文章目录
- 前言
- 实现多个接口
- 接口间的继承
- 接口使用实例
- 给对象数组排序
- 创建一个比较器
- 总结
前言
实现多个接口
Java中不支持多继承,但是一个类可以实现多个接口
下面是自己反复理了很久才敲出来的,涉及到之前学的很多知识点
如果哪看不懂,真的要回顾旧知识,温故而知新是真的不无道理。
没有前面知识的铺垫也学不到这里。
//父类
abstract class Animal {public String name;public int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}
}//接口
interface IRun{void run();
}
interface IFly{void fly();
}
interface ISwim{void swim();
}//子类继承父类
//Duck继承Animal 具有跑,飞,游泳的特性
class Duck extends Animal implements IRun,IFly,ISwim {//重写父类构造方法public Duck(String name, int age) {super(name, age);}//重写接口抽象类方法@Overridepublic void run() {System.out.println(this.name+"正在用两只脚脚跑");}@Overridepublic void swim() {System.out.println(this.name+"正在用两只脚脚游泳");}@Overridepublic void fly() {System.out.println(this.name+"正在用两只翅膀飞");}}
class Frog extends Animal implements IRun,ISwim{//重写父类构造方法public Frog(String name, int age) {super(name, age);}//重写接口抽象类方法@Overridepublic void run() {System.out.println(this.name+"正在用两条腿 跳着跑!");}@Overridepublic void swim() {System.out.println(this.name+"正在蛙泳!");}}
class Dog extends Animal implements IRun{//重写父类构造方法public Dog(String name, int age) {super(name, age);}//重写接口抽象类方法@Overridepublic void run() {System.out.println(this.name+"正在用两条腿跑!");}
}public class Day{//调用接口方法public static void running(IRun iRun){iRun.run();}public static void flying(IFly iFly){iFly.fly();}public static void swimming(ISwim iSwin){iSwin.swim();}public static void main(String[] args) {//实例化running(new Dog("二狗子",12));running(new Duck("唐老鸭",18));running(new Frog("青蛙王子",16));swimming(new Duck("唐老鸭",18));swimming(new Frog("青蛙王子",16));flying(new Duck("唐老鸭",18));}}
上面的代码是Java 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口
接口间的继承
在Java中,类和类之间是单继承的(即子类只能继承一个父类),一个类可以implements多个接口,接口与接口之间可以多继承。
interface A{void dancing();
}//B接口继承A接口的抽象方法
//所以B接口有两个抽象方法了
interface B extends A {void sing();
}
class demo implements B{//重写B接口的两个抽象方法@Overridepublic void dancing() {}@Overridepublic void sing() {}
}
接口使用实例
给对象数组排序
1.死板的写法
//类实现接口进行比较
class Student implements Comparable<Student>{public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}//重写接口方法@Overridepublic int compareTo(Student o) {if (this. age >o.age){return 1;} else if (this.age == o.age) {return 0;}else{return -1;}}
}
public class Test {public static void main(String[] args) {Student student = new Student("huahau",12);Student student2 = new Student("liangliang",6);System.out.println(student.compareTo(student2));}}

2.灵活的写法
创建一个比较器
class Student implements Comparable<Student>{public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}//重写接口方法@Overridepublic int compareTo(Student o) {return 0;}}
//年龄比较器Comparator<>
class AgeeComparator implements Comparator<Student>{@Overridepublic int compare(Student o1, Student o2) {return o1.age- o2.age;//o1大于o2返回正数,o1小于o2返回负数}
}//姓名比较器Comparator<>
class NameComparator implements Comparator<Student>{@Overridepublic int compare(Student o1, Student o2) {return o1.name.compareTo(o2.name);//姓名不能直接点出来,要点重写的方法}
}public class Test {public static void main(String[] args) {Student student1 = new Student("huahua",12);Student student2 = new Student("liangliang",6);//需要比较年龄,调用比较器就行,比较灵活方便AgeeComparator ageeComparator = new AgeeComparator();System.out.println(ageeComparator.compare(student1, student2));//需要比较姓名,调用比较器就行,比较灵活方便NameComparator nameComparator = new NameComparator();System.out.println(nameComparator.compare(student1, student2));}
}
总结
类实现多个接口:class 子类 extends 父类 implements 接口
接口与接口之间可以多继承:interface B extends A
这是最核心的两点。
多个接口的使用知识还是比较复杂的,多敲代码会更好理解。
相关文章:
【实现多个接口的使用】
文章目录 前言实现多个接口接口间的继承接口使用实例给对象数组排序创建一个比较器 总结 前言 实现多个接口 Java中不支持多继承,但是一个类可以实现多个接口 下面是自己反复理了很久才敲出来的,涉及到之前学的很多知识点 如果哪看不懂,真…...
Mac收集的几个终端命令
文章目录 转UTF-8编码格式打tag 包 命令:压缩加密文件显示隐藏文件取消Mac电脑安全模式 转UTF-8编码格式 cd到目录下 iconv -f gbk -t utf-8 gbk.txt > utf8.txt打tag 包 命令: cd到目录下 tar -cvf demo.tar.gz demo a demo压缩加密文件 cd 到文…...
206. 反转链表、Leetcode的Python实现
博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…...
VS2022 打包WPF安装程序最新教程(图文详解)
文章目录 前言一、安装打包Installer插件1、单独安装2、VS中在线安装二、使用步骤1、创建安装项目2、安装项目主界面3、添加项目输出4、添加快捷方式图标5、添加卸载项目a、新建项目b、添加项目输出c、创建快捷方式6、给快捷方式添加图标a、在Resource文件夹中添加图标文件b、选…...
清华大模型GLM
2022年,清华大学发布了一款具有重要意义的 GLM 大模型,它不仅在中文语言处理方面取得了显著的进展,还在英文语言处理方面表现出了强大的能力。GLM大模型区别于OpenAI GPT在线大模型只能通过API方式获取在线支持的窘境,GLM大模型属于开源大模型,可以本地部署进行行业微调、…...
实时数仓-hologres使用总结
我们回顾下,Hologres是一款实时HSAP产品,隶属阿里自研大数据品牌MaxCompute,兼容 PostgreSQL 生态、支持MaxCompute数据直接查询,支持实时写入实时查询,实时离线联邦分析,低成本、高时效、快速构筑企业实时…...
博客摘录「 TCP/IP网络编程——习题答案」2023年10月29日
clnt_sdaccept(serv_sd, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);read(clnt_sd, file_name, BUF_SIZE); fpfopen(file_name, "rb"); //尝试打开客户端请求的文件if(fp!NULL) //如果文件存在,则传送给客户端{while(…...
MySQL数据库干货_13—— MySQL查询数据
MySQL查询数据 SELECT基本查询 SELECT语句的功能 SELECT 语句从数据库中返回信息。使用一个 SELECT 语句,可以做下面的事: 列选择:能够使用 SELECT 语句的列选择功能选择表中的列,这些列是想 要用查询返回的。当查询时…...
Docker Consul概述及构建
Docker Consul概述及构建 一、Consul概述1.1、什么是Consul1.2、consul 容器服务更新与发现1.3、服务注册与发现的含义1.4、consul-template概述1.5、registrator的作用 二、consul部署2.1、环境配置2.2、在主节点上部署consul2.3 、配置容器服务自动加入nginx集群2.3.1、安装G…...
《Linux从练气到飞升》No.25 Linux中多线程概念
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...
2021~2023年度长垣起重机博览会最佳产品彩页(修订中)
1.河南恒达 比较完善的起重量限制器产品线分类,提供了监控参数一览表。 2.沪源电机 详细的电机参数,这基本上可以作为电机发展的历史资料来搜集。 3.英威腾 详细的变频器功能 4.杭州浙起 详尽的电动葫芦结构展示,电动葫芦参数展示 5.…...
OpenCV标定演示,及如何生成标定板图片
标定的程序在官方的源码里有, opencv-4.5.5\samples\cpp\tutorial_code\calib3d\camera_calibration 很多小白不知道怎么跑起来,这个也怪OpenCV官方,工作没做完善,其实的default.xml是要自己手动改的,输入的图片也要…...
python venv 虚拟环境使用
查看py版本python --version 创建虚拟环境 venvdemopython -m venv venvdemo 启动虚拟环境创建好虚拟环境后,当前目录会出现 venvdemo文件夹 cd envdemo\Scripts 执行 ./activate 文件 进入虚拟环境 关闭虚拟环境deactivate 如何查看Python虚拟环境位置python -c …...
useCallback和useMemo的区别?
文章目录 前言useCallbackuseMemouseCallback除了缓存回调函数还可以做什么操作?后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:react.js 🐱👓博主在前端领域还有很多知识和技术需要掌握࿰…...
Angular组件生命周期详解
当 Angular 实例化组件类 并渲染组件视图及其子视图时,组件实例的生命周期就开始了。生命周期一直伴随着变更检测,Angular 会检查数据绑定属性何时发生变化,并按需更新视图和组件实例。当 Angular 销毁组件实例并从 DOM 中移除它渲染的模板时…...
Redsync 多 Redis 实例使用 demo
完整代码传送门 package mainimport ("context""fmt""net/http""redis-distributed-lock/redis_client""strconv""github.com/go-redsync/redsync/v4""github.com/go-redsync/redsync/v4/redis/goredis/v9&…...
Docker(1)——安装Docker以及配置阿里云镜像加速
目录 一、简介 二、安装Docker 1. 访问Docker官网 2. 卸载旧版本Dokcer 3. 下载yum-utils(yum工具包集合) 4. 设置国内镜像仓库 5. 更新yum软件包索引 6. 安装Docker 7. 启动Docker 8. 卸载Docker 三、阿里云镜像加速 1. 访问阿里云官网 2. …...
MCU HardFault_Handler调试方法
一.获取内核寄存器的值 1.在MDK的DEBUG模式下,当程序出现跑飞后,确定卡死在HardFault_Handler中断处 2. 通过Register窗口读取LR寄存器的值来确定当前系统使用堆栈是MSP还是PSP LR寄存器值堆栈寄存器0xFFFFFFF9MSP寄存器0xFFFFFFFDPSP寄存器 如下图所…...
【深度学习】AUTOMATIC1111 / stable-diffusion-webui docker
代码:https://github.com/AUTOMATIC1111/stable-diffusion-webui/ CUDA 11.8 制作了一个镜像,可以直接开启stable diffusion的web ui 服务。 确定自己的显卡支持CUDA11.8,启动此镜像方式: docker run -it --networkhost --gpu…...
[Hive] 查询结果保存
文章目录 1.插入新表追加 2.插入hdfs文件系统 1.插入新表 使用INSERT OVERWRITE语句的情况: 整个表:可以使用INSERT OVERWRITE TABLE table_name语句将查询结果直接覆盖整个表中的数据。 INSERT OVERWRITE TABLE table_name SELECT * FROM ...特定分区…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
