Interface 接口

/*

* 语法1:使用interface关键字定义

* 语法2:接口中,允许定义“抽象方法”,public 和 abstract关键字可以省略

* 语法3:接口中,允许定义“默认方法”

* 语法4:实现类通过implements关键字实现接口,可以同时实现多个接口

*/

package com.ztt.Demo01MyInterface;/** 语法1:使用interface关键字定义* 语法2:接口中,允许定义“抽象方法”,public 和 abstract关键字可以省略* 语法3:接口中,允许定义“默认方法”* 语法4:实现类通过implements关键字实现接口,可以同时实现多个接口*/public interface MyInterface {//允许定义“抽象方法”void dosth();public abstract void  absTDowork();//允许定义“默认方法”public default void dolist() {}//不允许定义“构造方法”
//	public MyInterface() {
//		
//	}//不允许定义“普通方法”
//	public void dolist() {
//		
//	}}
class Ext implements MyInterface,AnotherInterface{@Overridepublic void dosth() {// TODO Auto-generated method stub}@Overridepublic void absTDowork() {// TODO Auto-generated method stub}@Overridepublic void todo() {// TODO Auto-generated method stub}}
package com.ztt.Demo01MyInterface;public interface AnotherInterface {public default void todo() {}
}
package com.ztt.Demo01MyInterface;import java.util.Arrays;
import java.util.Comparator;//interface 接口的使用场景:Arrays.sort()方法自定义排序
public class test1 {public static void main(String[] args) {String[] arr= {"def","abcd","abb","aaa","hij","aaaa","bnn","cdd"};//默认按照字符串的ASCII码值进行比较//Arrays.sort(arr);//按照字符串的长度进行比较,如果长度一致,再按照ASCII码值进行比较//默认升序StringLengthAndAsciiComparator comp1=new StringLengthAndAsciiComparator();//升序Arrays.sort(arr,comp1);//降序Comparator<String> comp2=comp1.reversed();Arrays.sort(arr,comp2);for(String s:arr) {System.out.println(s);}}}//Comparator接口实现类:封装“排序是的比较”逻辑
class StringLengthAndAsciiComparator implements Comparator<String>{//正数代表o1>o2//负数代表o1>o2//零代表o1=o2public int compare(String o1,String o2) {//按照字符串的长度进行比较,如果长度一致,再比较Ascii码值进行比较if(o1.length()==o2.length()) {//按照字符串Ascii码值进行比较return o1.compareTo(o2);}return o1.length()-o2.length();}
}

运行结果:

def
cdd
bnn
abb
aaa

 

package com.ztt.Demo01MyInterface;import java.util.Arrays;
import java.util.Comparator;public class BookTest {public static void main(String[] args) {//对象数组Book[] books = {new Book("E",1247,17.85,10005),new Book("A",8547,33.58,10005),new Book("H",7413,18.88,10007),new Book("K",9631,19.85,10001),new Book("B",7581,22.51,10006),new Book("M",1574,16.89,10002)};//排序//按照图书名称进行比较排序BookNameComparator comp1=new BookNameComparator();
//		Arrays.sort(books,comp1);//按照图书页数进行比较排序BookPageSizeComparator comp2=new BookPageSizeComparator();//传入不同的Comparator比较器对象//比较规则不同,则排序结果不同//Arrays.sort( books, comp2);//按照默认比较规则Arrays.sort(books);//输出for(Book b: books) {System.out.println(b);}}}//按照图书名称进行"自定义比较规则"
class BookNameComparator implements Comparator<Book>{@Overridepublic int compare(Book b1, Book b2) {// 按照书名进行比较return b1.getBookName().compareTo(b2.getBookName());}}
//按照图书页数进行"自定义比较规则"
class BookPageSizeComparator implements Comparator<Book>{@Overridepublic int compare(Book o1, Book o2) {// 按照页数进行比较return o1.getPageSize()-o2.getPageSize();}}
//图书类
class Book implements Comparable<Book>{private String bookName;//图书名称private int pageSize;//总页数private double price;//销售价格private int sale;//销量public Book(String bookName,int pageSize,double price,int sale) {this.bookName=bookName;this.pageSize=pageSize;this.price=price;this.sale=sale;}@Overridepublic boolean equals(Object obj) {if(this==obj) {return true;}if(obj instanceof Book) {//向下转型Book anotherBook=(Book)obj;return this.bookName.equals(anotherBook.bookName) &&this.pageSize == anotherBook.pageSize &&this.price == anotherBook.price &&this.sale == anotherBook.sale;}return false;}//实现Comparable接口时,重写compareTo@Overridepublic int compareTo(Book anotherBook) {// this和anotherBook进行比较//默认按照销量进行比较return this.getSale()-anotherBook.getSale();}//重写Object类的toString()方法@Overridepublic String toString() {return String.format("<<%s>>,共计%d页,销售价格$%.2f, 总销量%d本",bookName,pageSize,price,sale);}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getSale() {return sale;}public void setSale(int sale) {this.sale = sale;}}

运行结果:

<<K>>,共计9631页,销售价格$19.85, 总销量10001本
<<M>>,共计1574页,销售价格$16.89, 总销量10002本
<<E>>,共计1247页,销售价格$17.85, 总销量10005本
<<A>>,共计8547页,销售价格$33.58, 总销量10005本
<<B>>,共计7581页,销售价格$22.51, 总销量10006本
<<H>>,共计7413页,销售价格$18.88, 总销量10007本
package com.ztt.Demo01MyInterface;public class testBook {public static void main(String[] args) {Book b1 = new Book("E",1247,17.85,10005);Book b2 = new Book("A",8547,33.58,10005);Book b3 = new Book("E",1247,17.85,10005);Book b4 = new Book("H",7413,18.88,10007);//比大小// b1.compareTo(b2);//比内存地址是否相同// b1 == b2System.out.println(b1 == b3);//比"值"(内容数据)是否相同//b1.equals(b2);System.out.println(b1.equals(b3));}}
false
true
package com.ztt.Demo03Document;//新闻文档
public class Document implements Comparable<Document>{private int star; // 点赞数private String title; // 文档标题private int visit; // 访问量//重写Comparable接口中的抽象方法:提供比较大小的逻辑@Overridepublic int compareTo(Document another) {// 默认使用点赞数return this.star - another.star;}//重写Object类的equals():比较内容是否一致(等值比较)@Overridepublic boolean equals(Object another) {// 先比较内存地址if(this==another) {return true;}if(another instanceof Document) {//向下转型Document anotherDoc=((Document) another);//同时比较“点赞数+访问量+标题”return this.star==anotherDoc.star && this.visit==anotherDoc.visit && this.title.equals(anotherDoc.title);}//默认返回falsereturn false;}// 构造方法public Document(int star,String title,int vist) {this.setStar(star);this.setTitle(title);this.setVisit(vist);}public int getVisit() {return visit;}public void setVisit(int visit) {this.visit = visit;}@Overridepublic String toString() {return "Document [点赞数=" + star + ", 标题=" + title + ", 访问量=" + visit + "]";}public int getStar() {return star;}public void setStar(int star) {this.star = star;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}

测试类:

package com.ztt.Demo03Document;import java.util.Arrays;
import java.util.Comparator;public class test1 {public static void main(String[] args) {Document[] documentArray = {new Document(324, "05你觉得新冠疫情会持续多久才能彻底结束?",567),new Document(632, "03女朋友动不动就生气怎么办?",123),new Document(135, "02央行大放水,但是房价和股市都没有大涨,那么,钱去哪里了?",345),new Document(246, "04庄家能把散户看透到什么地步?",456),new Document(975, "06事业单位,上班如上坟,已经有些抑郁了,我该考虑辞职吗?",321),new Document(235, "01微信全文搜索技术优化",789),};//实现对象数组documentArray的排序//Arrays.sort(documentArray);//仅传入了数组//按照标题名称//方式1//DocumentTitleComparator comp = new DocumentTitleComparator();//Arrays.sort(documentArray,comp);//方式2//Arrays.sort(documentArray,new DocumentTitleComparator());//按照访问量//匿名实现类Arrays.sort(documentArray,new Comparator<Document>() {@Overridepublic int compare(Document o1, Document o2) {return o1.getVisit() - o2.getVisit();}		});for(Document doc : documentArray) {System.out.println(doc.toString());}}
}
//按照标题比较
class DocumentTitleComparator implements Comparator<Document>{@Overridepublic int compare(Document o1, Document o2) {return o1.getTitle().compareTo(o2.getTitle());}}

运行结果:

Document [点赞数=632, 标题=03女朋友动不动就生气怎么办?, 访问量=123]
Document [点赞数=975, 标题=06事业单位,上班如上坟,已经有些抑郁了,我该考虑辞职吗?, 访问量=321]
Document [点赞数=135, 标题=02央行大放水,但是房价和股市都没有大涨,那么,钱去哪里了?, 访问量=345]
Document [点赞数=246, 标题=04庄家能把散户看透到什么地步?, 访问量=456]
Document [点赞数=324, 标题=05你觉得新冠疫情会持续多久才能彻底结束?, 访问量=567]
Document [点赞数=235, 标题=01微信全文搜索技术优化, 访问量=789]
package com.ztt.Demo03Document;public class test3 {public static void main(String[] args) { Document doc1 = new Document(235,"02.微信全文搜索技术优化",746);Document doc2 = new Document(235,"03.女朋友动不动就生气怎么办?",4757);Document doc3 = new Document(246,"04.庄家能把散户看透到什么地步?",7547);Document doc4 = new Document(235,"02.微信全文搜索技术优化",746);//通过compareTo()方法比较大小(按照点赞数)//system.out.println( doc1.compareTo( doc2));l //System.out.println( doc1.compareTo( doc3) );//通过compareTo()方法比较内容是否相等//存在的问题:点赞数一致但其余数据不相同//System.out.println(doc1.compareTo(doc2));//存在问题//引用数据类型:==比较内存地址System.out.println(doc1 == doc4);//引用数据类型:重写object类的equals()方法System.out.println(doc1.equals(doc4));}
}

运行结果:

false
true

 

 

 

 

 

 

 

小结
1.Java的接口( interface )用于定义纯粹的抽象行为(方法)规范。
2.一个类只能extends继承自另一个类(单继承)。但是,一个类可以implements实现多个interface接口(多重实现)。
3.一个interface可以继承自多个interface(接口之间允许多重继承)。。一个类实现interface接口时,要求必须实现该接口中所有的抽象方法。
4.接口也是一种“高层”的数据类型,可以用于定义“引用”的类型,也适用于"向上转型"和"向下转型"。·接口不允许实例化。
5.接口的所有方法都是抽象方法,接口不能定义实例字段(成员变量)。
6.接口可以定义default方法([ JDK版本>= 1.8 ) , default方法可以包含方法体。

7.实现 Comparable接口的类,该类的对象之间可以进行“比较”,用于“排序”。 

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

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

相关文章

What is `@Repository` does?

Repository 是Spring注解&#xff0c;标识数据访问层组件&#xff08;DAO, Data Access Object&#xff09; 当一个类被标记为 Repository 时&#xff1a; 1、组件扫描与自动代理&#xff1a; Spring通过组件扫描&#xff08;Component Scan&#xff09;机制发现带有 Reposit…

编程语言的比较—c语言,c++与java,c#的比较

c语言是历史悠久的语言&#xff0c;不仅可以开发应用程序&#xff0c;还可以用来编写操作系统。如果对接近硬件的部分进行操作&#xff0c;c语言是不二之选。 c语言是c语言中增加面向对象功能的编程语言。通常情况下&#xff0c;c可以编译c语言编写的代码。c广泛应用于微型计算…

【AI绘画+本地部署】基于krita的AI绘画(含windows一键整合包)

comfyuikrita所有相关资源整合包(无需下载后面链接)百度网盘&#xff1a;https://pan.baidu.com/s/1iwNRpdTaD26YbzSDm6WLDA?pwdbur8 –来自百度网盘超级会员V4的分享 krita绘画软件官网地址 https://krita.org/en/download/krita-desktop/ krita-ai-diffusion 插件&#xff…

数据库:园林题库软件(《城市绿地系统规划》答题卷四)

《城市绿地系统规划》答题卷四 填空题 1、生产绿地是指为城市绿化提供苗木、花草、种子的苗圃、草圃等圃地&#xff0c;是为城市绿化服务的生产、科研实验绿地。 园林苗圃的规模按照其用地面积来划分&#xff0c;可分为大型苗圃、中型苗圃、小型苗圃三类。 2、防护绿地是出…

P1451 求细胞数量——深搜、广搜

求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞&#xff0c;求给定矩形阵列的细胞个数。 输入格式 第一行两个整数代表矩阵大小 n n n 和…

计算机网络-ACL访问控制列表

上一篇介绍NAT时候就看到了ACL这个东西了&#xff0c;这个是什么意思&#xff1f;有什么作用呢&#xff1f; 一、ACL访问控制列表 访问控制列表 (ACL, Access Control List)是由一系列permit或deny语句组成的、有序规则的列表。ACL是一个匹配工具&#xff0c;能够对报文进行匹配…

鸿蒙原生应用/元服务实战-AGC团队账户

多人及内外结合去开发运营鸿蒙原生应用元服务时&#xff0c;需要用到团队账户&#xff0c;AGC提供了强大的团队角色与权限分工能力。 团队帐号是开发者联盟为实名开发者提供的多个成员帐号登录与权限管理服务。当前团队帐号支持成员参与应用市场&#xff08;付费推广、应用内付…

设备树(1)-设备树是什么?设备树基础概念及语法

1.简介 设备树&#xff1a;device tree DTS&#xff1a;设备树源码文件&#xff0c;采用树形结构描述板级信息&#xff0c;例如IIC、SPI等接口接了哪些设备 DTSI&#xff1a;设备树头文件&#xff0c;描述SOC级信息&#xff0c;例如几个CPU、主频多少、各个外设控制信息等 DTB…

vue列表飞入效果

效果 实现代码 <template><div><button click"add">添加</button><TransitionGroup name"list" tag"ul"><div class"list-item" v-for"item in items" :key"item.id">{{ i…

校园水电抄表系统

校园水电抄表系统是一种现代化的水电管理方式&#xff0c;它通过高科技手段实现对校园内水电使用情况的实时监测和数据化管理&#xff0c;从而提高水电资源的利用效率&#xff0c;降低管理成本&#xff0c;为构建绿色、环保、节约型校园奠定基础。 一、系统概述 校园水电抄表…

K8S---NetworkPolicy

一、简介 在操作系统中,服务器有出口流量和入口流量,可以为服务器设置网络策略,允许哪些ip可以访问本机器的哪些端口,设置本机器可以访问哪些其他机器;在K8S系统类似,pod如同服务器,可以设置哪些其他pod可以访问本pod的哪些端口,也可以设置本pod可以访问外部哪些pod的…

力扣 | 11. 盛最多水的容器

双指针解法–对撞指针 暴力解法public int maxArea1(int[] height) {int n height.length;int ans 0;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {int area Math.min(height[i], height[j]) * (j - i);ans Math.max(ans, area);}}return ans;}双指针解法…

vue动画(transition)

Vue动画&#xff08;transition&#xff09; 动画列表&#xff08;选择其中一个即可&#xff09; /* fade */ .fade-enter-active, .fade-leave-active {transition: opacity 0.28s; } ​ .fade-enter, .fade-leave-active {opacity: 0; } /* fade */ ​ /* fade-transform */…

ARP相关

ARP报文格式&#xff1a; 目的以太网地址&#xff0c;48bit&#xff0c;发送ARP请求时&#xff0c;目的以太网地址为广播MAC地址&#xff0c;即0xFF.FF.FF.FF.FF.FF。 源以太网地址&#xff0c;48bit。 帧类型&#xff0c;对于ARP请求或者应答&#xff0c;该字段的值都为0x08…

怎么剪切视频中的一部分?看完你就知道了

怎么剪切视频中的一部分&#xff1f;随着自媒体的兴起&#xff0c;越来越多的人开始关注视频编辑和后期制作。在众多自媒体平台上&#xff0c;我们经常可以看到一些精彩的短视频&#xff0c;而这些视频往往都是经过精心编辑和剪切的。那么&#xff0c;怎么剪切视频中的一部分呢…

刘阳,定格历史,守护中华文化!

2021年2月24日&#xff0c;#圆明园365张珍贵老照片#的话题凭3.7亿阅读量冲上热搜。这批时代跨越80年的老照片仿佛重启记忆的按钮&#xff0c;让人梦回“夏宫”&#xff1b;少有人知道&#xff0c;它们的拥有者&#xff0c;却是一位不折不扣的80后。 刘阳&#xff0c;土生土长北…

springboot多数据源支持自定义连接池

背景 springboot 多数据源网上的文章很多&#xff0c;但大多都是互相抄袭&#xff0c;虽然可以实现多数据源的效果&#xff0c;但都是使用的默认的连接池&#xff0c;如果盲目使用可能会导致自定义的连接池参数没生效从而引发数据库连接问题。下面是参考官方文档多数据源支持自…

制作一个Python聊天机器人

我们学习一下如何使用 ChatterBot 库在 Python 中创建聊天机器人&#xff0c;该库实现了各种机器学习算法来生成响应对话&#xff0c;还是挺不错的 什么是聊天机器人 聊天机器人也称为聊天机器人、机器人、人工代理等&#xff0c;基本上是由人工智能驱动的软件程序&#xff0…

情人节专属--HTML制作情人节告白爱心

💕效果展示 💕html展示 <!DOCTYPE html> <html lang="en" > <head>

基于springboot+vue的旅游网站系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…