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

【JAVA基础】接口

文章目录

  • 接口
  • Comparable、Comparator和Arrays.sort()的关系
    • Comparable、Comparator介绍
    • 什么时候使用?
    • `Arrays.sort`重载的四类方法


接口

  • 接口是对行为的定义或规范,接口中只能使用抽象方法

  • 接口中只能使用抽象方法

  • 默认也是public修饰符修饰的方法,不需要再写public和abstract关键字

  • 接口类无法创建对象,只能使用多态

  • 接口类可以被多继承,一个类可以继承多个接口(设计接口的目的之一就是实现java类的多继承)

    定义一个Animals接口

    public interface Animals {public abstract void run(); // 默认也是public修饰符修饰的方法,不需要再写public和abstract关键字
    }
    

    定义一个A接口

    public interface A {void fly();
    }
    

    定义一个子类Cat

    public class Cat implements Animals,A{@Overridepublic void fly(){}@Overridepublic void run(){}
    }
    

    子类Cat可以同时继承Animals接口与A接口,并且需要实现其中的抽象方法

    设计抽象类的目的之一:更好的实现接口中所定义的方法

    以Servlet项目为例子:

    在这里插入图片描述

    可以看到Servlet都会向上继承,最高的父类中定义了三个抽象方法,初始化,服务,销毁,这三个方法分别在下面的子类中被实现

编程练习:设计一个动物管理系统,包含以下几个部分:

  1. **定义一个动物接口(Animal):**包含所有动物共有的方法,如eat()sleep()
  2. **定义一个可飞行接口(Flyable):**包含所有的飞行方法,这个接口将由能飞行的动物实现
  3. **定义一个可以游泳的接口(Swimmable):**包含游泳的方法swim(),这个接口有能够游泳的动物实现
  4. **定义一个抽象类(AnimalBase):**提供eat()sleep()方法的具体实现,作为所有动物类的基类
  5. **实现具体的动物类:**如Bird(鸟,实现Flyable接口并继承AnimalBase),Fish(鱼,实现Swimmable接口并继承AnimalBase),Dog(狗,仅继承AnimalBase
  6. **编写测试类:**在测试类中创建这些动物实例,并调用他们的方法,展示其行为

创建Animal接口,定义抽象方法eat()sleep()

public interface Animal {void eat();void sleep();
}

创建Flyable()接口,定义抽象方法fly()

public interface Flyable {void fly(); //飞行动物
}

创建Swimmable()接口,定义抽象方法swim()

public interface Swimmable {void swim(); // 水下动物
}

创建抽象类AnimalBase,实现eat()sleep()方法

public abstract class AnimalBase {public void eat(){System.out.println("动物需要进食");}public void sleep(){System.out.println("动物需要睡觉");}
}

创建子类,并继承对应接口:

public class Bird extends AnimalBase implements Flyable{@Overridepublic void eat(){System.out.println("鸟需要进食");}@Overridepublic void sleep(){System.out.println("鸟需要睡觉");}public void fly(){System.out.println("鸟可以飞");}
}public class Fish extends AnimalBase implements Swimmable{public void swim(){System.out.println("鱼可以游泳");}@Overridepublic void sleep(){System.out.println("鱼需要睡觉");}@Overridepublic void eat(){System.out.println("鱼需要进食");}
}public class Dog extends AnimalBase{@Overridepublic void sleep(){System.out.println("狗需要睡觉");}@Overridepublic void eat(){System.out.println("狗需要进食");}
}

对抽象方法的实现:

public class Test {public static void main(String[] args) {Bird bird = new Bird();Fish fish = new Fish();Dog dog = new Dog();bird.eat();bird.fly();bird.sleep();dog.eat();dog.sleep();fish.eat();fish.sleep();fish.swim();}
}

Comparable、Comparator和Arrays.sort()的关系

Comparable、Comparator介绍

  • **Comparable**是 排序接口 ,只有一个方法 compareTo() ,如果 想让一个类可以通过Arrays.sort() 方法进行排序,则可以让这个类继承Comparable接口 重写这个方法。
  • **Comparator **是 比较接口 ,如果一个类本身不支持排序(即没有实现Comparable接口),但你又不能改动这个类,就可以写一个类(这个类又叫“比较器”) 实现Comparator接口, 然后重写Compare()方法。我们想要排序的时候,就可以把这类的实例化对象传入到Arrays.sort() 这个方法里。

什么时候使用?

  • Comparable:当我们自己写一个类的时候,可以用这个方法实现想要比较的规则
  • Comparator:当一个类没有比较器,或者我们原本的比较器中的规则不是我们想要的

Arrays.sort重载的四类方法

  • sort( T[] a ) 对指定T型数组按数字升序排序。
  • sort( T[] a , int formIndex , int toIndex ) 对指定T型数组的指定范围按数字升序排序。
  • sort( T[] a , Comparator<? supre T> c ) 根据指定比较器产生的顺序对指定对象数组进行排序。
  • sort( T[] a , int formIndex , int toIndex , Comparator<? super T> c) 根据指定比较器产生的顺序对指定对象数组的指定对象数组进行排序。

Comparable案例

public class Person implements Comparable<Person>{public int age;public int height;public Person(int age,int height){this.age = age;this.height = height;}@Overridepublic String toString() {return "Person{" +"age=" + age +", height=" + height +'}';}@Overridepublic int compareTo(Person o) {// 定义从小到大排序age - o.age// 定义从小到大排序o.age - agereturn age - o.age;}
}public class Test {public static void main(String[] args) {
//        int[] arr = new int[]{1,3,5,4,6,7,2};
//        Arrays.sort(arr);
//        System.out.println(Arrays.toString(arr));Person p1 = new Person(18,180);Person p2 = new Person(20,177);Person p3 = new Person(10,190);Person p4 = new Person(27,185);Person[] person = new Person[]{p1,p2,p3,p4};Arrays.sort(person); //快排Arrays2.sort(person);System.out.println(Arrays.toString(person));}
}

Comparator案例

//我们写一个实现Comparator的类,然后重写compare方法
class MyComparator implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}
}
public class TestComparator {public static void main(String[] args) {Integer[] arr = {2, 3, 44, 11, 344, 11};MyComparator cmp = new MyComparator();Arrays.sort(arr, cmp);//arr是数组,cmp是传入这个类System.out.println(Arrays.toString(arr));}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ubuntu如何限制三指手势操作
  • HALCON与LabVIEW的联合编程 视觉与控制结合
  • LuaJit分析(九)LuaJit中的JIT原理分析
  • WebRTC协议下的视频汇聚融合技术:EasyCVR构建高效视频交互体验
  • Uniapp:WebSocket 重连之后累加触发 uni.onSocketOpen()
  • 2024/9/3黑马头条跟学笔记(一)
  • c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)
  • VM Workstation虚拟机AlmaLinux 9.4操作系统安装(桌面版安装详细教程)(宝塔面板的安装),填补CentOS终止支持维护的空白
  • 开源项目管理工具 Plane 安装和使用教程
  • opencv车道偏离系统-代码+原理-人工智能-自动驾驶
  • 【Next】3. 开发规范
  • 哪个编程工具让你的工作效率翻倍?
  • zhidianyun01/基于 ThinkPHP+Mysql 灵活用工+灵活用工源码+灵活用工平台源码
  • 怎样通过c51实现环境监测设计
  • shell脚本—————局域网IP扫描
  • eclipse的离线汉化
  • hadoop集群管理系统搭建规划说明
  • javascript数组去重/查找/插入/删除
  • js学习笔记
  • Making An Indicator With Pure CSS
  • Python打包系统简单入门
  • React Transition Group -- Transition 组件
  • Terraform入门 - 1. 安装Terraform
  • Vue.js源码(2):初探List Rendering
  • Vue2 SSR 的优化之旅
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 今年的LC3大会没了?
  • 排序(1):冒泡排序
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 用jquery写贪吃蛇
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # Redis 入门到精通(一)数据类型(4)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • ()、[]、{}、(())、[[]]命令替换
  • (4) PIVOT 和 UPIVOT 的使用
  • (MATLAB)第五章-矩阵运算
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读11/100)Fast R-CNN
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)为什么要选择C++
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)大型网站的系统架构
  • (转载)Google Chrome调试JS
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET CLR Hosting 简介
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core跨平台微服务学习资源
  • .NET 材料检测系统崩溃分析
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • 。。。。。