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

【实现多个接口的使用】

文章目录

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


前言

实现多个接口

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

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

相关文章:

  • 软件测试面试,一定要准备的7个高频面试题(附答案,建议收藏)
  • QMS质量检验管理|攻克制造企业质量检验难题,助力企业提质增效
  • web - 会话技术
  • Android照搬,可删
  • 玻色量子签约移动云“五岳”量子云计算创新加速计划!
  • 使用 ElementUI 组件构建 Window 桌面应用探索与实践(WinForm)
  • 微服务parent工程和子工程pom文件配置注意
  • 线扫相机DALSA-相机平场矫正详细步骤
  • 一文深入了解 CPU 的型号、代际架构与微架构
  • MySQL8.0安装
  • Linux的开发环境安装配置与后端项目部署
  • 爬虫API中的滑块验证及解决方案
  • Mac终端学习
  • RK3588平台开发系列讲解(项目篇)基于yolov5的物体识别
  • Android.bp探究
  • android 一些 utils
  • Angular6错误 Service: No provider for Renderer2
  • gf框架之分页模块(五) - 自定义分页
  • HomeBrew常规使用教程
  • Iterator 和 for...of 循环
  • Java小白进阶笔记(3)-初级面向对象
  • JWT究竟是什么呢?
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mysql 5.6 原生Online DDL解析
  • Node + FFmpeg 实现Canvas动画导出视频
  • PhantomJS 安装
  • Python 反序列化安全问题(二)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vuex 学习笔记 01
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 理解在java “”i=i++;”所发生的事情
  • 试着探索高并发下的系统架构面貌
  • 学习笔记TF060:图像语音结合,看图说话
  • 一文看透浏览器架构
  • 优化 Vue 项目编译文件大小
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #{} 和 ${}区别
  • #FPGA(基础知识)
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (6)STL算法之转换
  • (arch)linux 转换文件编码格式
  • (C语言)fread与fwrite详解
  • (java)关于Thread的挂起和恢复
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (转)setTimeout 和 setInterval 的区别
  • (转)Windows2003安全设置/维护
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)详解PHP处理密码的几种方式
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET CORE Aws S3 使用
  • .NET MVC之AOP