【实现多个接口的使用】

news2024/11/30 8:39:21

文章目录

  • 前言
  • 实现多个接口
  • 接口间的继承
  • 接口使用实例
    • 给对象数组排序
    • 创建一个比较器
  • 总结


前言

实现多个接口

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);
    }

    //重写接口抽象类方法
    @Override
    public void run() {
        System.out.println(this.name+"正在用两只脚脚跑");

    }

    @Override
    public void swim() {
        System.out.println(this.name+"正在用两只脚脚游泳");
    }

    @Override
    public void fly() {
        System.out.println(this.name+"正在用两只翅膀飞");

    }

}
class Frog extends Animal implements IRun,ISwim{
    //重写父类构造方法
    public Frog(String name, int age) {
        super(name, age);
    }

    //重写接口抽象类方法
    @Override
    public void run() {
        System.out.println(this.name+"正在用两条腿 跳着跑!");

    }

    @Override
    public void swim() {
        System.out.println(this.name+"正在蛙泳!");

    }

}
class Dog extends Animal implements IRun{
    //重写父类构造方法
    public Dog(String name, int age) {
        super(name, age);
    }
    //重写接口抽象类方法

    @Override
    public 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接口的两个抽象方法
    @Override
    public void dancing() {

    }

    @Override
    public 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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    //重写接口方法
    @Override
    public 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;
    }

    //重写接口方法
    @Override
    public int compareTo(Student o) {
        return 0;
    }

}
//年龄比较器Comparator<>
class AgeeComparator implements Comparator<Student>{

    @Override
    public int compare(Student o1, Student o2) {
        return o1.age- o2.age;
        //o1大于o2返回正数,o1小于o2返回负数
    }
}

//姓名比较器Comparator<>
class NameComparator implements Comparator<Student>{
    @Override
    public 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

这是最核心的两点。
多个接口的使用知识还是比较复杂的,多敲代码会更好理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于向量数据库的文档检索实战

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 在过去的六个月里&#xff0c;我一直在 A 系列初创公司 Voxel51 工作&#xff0c;该公司是开源计算机视觉工具包 FiftyOne 的创建者。 作为一名机器学习工程师和开发人员布道者&#xff0c;我的工作是倾听我们的开源社区的…

LabVIEW开发双目立体系统猪重估算

LabVIEW开发双目立体系统猪重估算 动物的活重是各种研究中的重要参考&#xff0c;例如动物生长&#xff0c;饲料转化率&#xff0c;健康状况和疾病发生。生长中的动物的体重为保持它们处于适当的营养和环境水平提供了一个有价值的参数或指标。动物的利润通常与收入和成本之间的…

Sci Immunol丨Tim-3 适配器蛋白 Bat3 是耐受性树突状细胞

今天和大家分享一篇发表于2022年3月的文章&#xff0c;题目为“Tim-3 adapter protein Bat3 acts as an endogenous regulator of tolerogenic dendritic cell function”&#xff0c;发表在《Sci Immunol》杂志上。文章主要研究了Tim-3和其适配蛋白Bat3在调节免疫应答中的作用…

2023年【R1快开门式压力容器操作】最新解析及R1快开门式压力容器操作复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 R1快开门式压力容器操作最新解析是安全生产模拟考试一点通生成的&#xff0c;R1快开门式压力容器操作证模拟考试题库是根据R1快开门式压力容器操作最新版教材汇编出R1快开门式压力容器操作仿真模拟考试。2023年【R1快…

linux 安装 elasticsearch 全教程

一、去 elasticsearch官网找到Linux版本的下载链接 地址https://www.elastic.co/cn/downloads/elasticsearch 二、在linux 中用wget下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-linux-x86_64.tar.gz三、下载成功后解压文件 tar -x…

Unity中Shader自定义cginc文件

文章目录 前言我们在使用如下场景中的小球来进行自己的 GI Shader测试一、先找到Unity自带的 cginc 库二、仿照 Unity 的 cginc 文件&#xff0c;写一个我们自己的 cginc 文件1、我们新建一个文件&#xff0c;在资源管理器中把 文件后缀名修改成 .cginc2、我们打开Unity自己的c…

【Linux】安装使用Nginx负载均衡,并且部署前端项目

目录 一、Nginx概述 1. 什么 2. 背景 3. 作用 二、Nginx负载均衡 1. 讲述 2. 使用 1. 下载 2. 安装 3. 负载均衡 三、前端部署 1. 准备 2. 部署 一、Nginx概述 1. 什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它具有轻量级、高并发、低内存消耗的…

让你笑到不行的笑话短视频接口,快来试试!

11在当今这个快节奏的社会中&#xff0c;笑话成为了许多人调节情绪的有效方法。如今&#xff0c;短视频平台已经成为了最受欢迎的娱乐方式之一&#xff0c;因此&#xff0c;将笑话和短视频结合起来&#xff0c;成为了一种很有趣的方式来带给我们欢乐。今天我们要介绍的是挖数据…

【电路笔记】-正弦波形

正弦波 文章目录 正弦波1、概述2、波形产生3、总结 在 19 世纪末的 10 年间&#xff0c;许多技术成就使得交流电的使用得以扩展&#xff0c;并克服了直流电向公众供电的局限性。 1882 年&#xff0c;法国发明了变压器&#xff0c;它简化了交流电的分配&#xff0c;正如我们将在…

【免费活动】11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

活动介绍 过去的几年里&#xff0c;外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里&#xff0c;每一个人都成为自己生活里的冒险家。面对每一次的变化&#xff0c;勇于探索未知&#xff0c;迎接挑战&#xff0c;努力追逐更好的自己。 七月&#xff0…

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)

目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…

跨境电商怎么做?欲善其事,先利其器!

当前&#xff0c;跨境电商正在以飞速的发展趋势推进&#xff0c;在未来将会朝向成熟系统化的方向发展&#xff0c;对于跨境电商从业者来说既是机遇&#xff0c;也是挑战。不少想转行的朋友对于跨境行业早已“跃跃欲试”&#xff0c;但是不了解跨境电商却又久久不敢冒险......那…

Javassist讲解1(介绍,读写字节码)

Javassist讲解1&#xff08;介绍&#xff0c;读写字节码&#xff09; 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单&#xff0c;它是一个用于在Java中编辑字节码的类库&#xff1b; 它使Java程序能够在运行时定义一个新类&#xff0c;…

JS(JavaScript) 实现延迟等待(sleep方法)

起因&#xff1a; 只使用 setTimeout 会产生嵌套等方面的问题&#xff0c;达不到想要的效果。 解决方法&#xff1a; 使用 async/await 还有 Promise 相结合的方式来解决问题。 直接上代码&#xff1a; function sleep(time) {return new Promise((resolve) > setTimeout…

基于深度学习的植物识别算法 - cnn opencv python 计算机竞赛

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …

交叉编译tslib

交叉编译tslib 环境&#xff1a; ubuntu16.04(虚拟机) tslib 版本&#xff1a;1.4.0 交叉编译器&#xff1a;gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 目标架构&#xff1a;ARM 野火imx6ull pro开发板 tslib的下载 tslib的下载地址 https://github.com/Mic…

Python数据分析(四)-- 操作Excel文件

1 操作Excel文件-多种实现方式 在实际生产中&#xff0c;经常会用到excel来处理数据&#xff0c;虽然excel有强大的公式&#xff0c;但是很多工作也只能半自动化&#xff0c;配合Python使用可以自动化部分日常工作&#xff0c;大大提升工作效率。 openpyxl&#xff1a;只允许读…

第一章 引言 【数据结构与算法】【精致版】

第一章 引言 【数据结构与算法】【精致版】 前言版权第一章 引言三个问题超市商品问题人机对弈问题多岔路口交通灯的管理问题 1.1 数据结构的概念1.2 数据结构的内容1.2.1 数据的逻辑结构1.2.2 数据的存储结构 1.3 算法1.3.1 算法的概念1.3.2 算法的评价标准1.3.3 算法的描述1.…

GAMP源码阅读:卫星位置钟差计算

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 1、satposs_rtklib()2、ephclk()1. eph2clk()&#xff1a;时钟校正参数&#xff08; a f 0 、 a f 1 、 a f 2 a_{f0}、a_{f1}、a_{f2} af0​、af…

【编程语言发展史】C语言的诞生及其影响

目录 一、C语言的历史背景 二、C语言的设计思想 三、C语言的语法特点 四、C语言的应用领域 五、C语言的影响 六、总结 C语言是一种高级计算机编程语言&#xff0c;它的诞生和发展对计算机科学和软件工程领域产生了深远的影响。本文将详细介绍C语言的诞生及其影响&#xf…