Java 设计模式 Day2 之面向抽象原则:接口(interface)的设计应用与抽象类的区别

文章目录

  • 前言
  • 一、接口(interface)的设计要点与抽象类的区别
  • 二、接口(interface)的应用实例
    • 2.1、创建一个接口(interface)
    • 2.2、创建实现接口的类
    • 2.3、通过接口回调调用被类实现的方法
  • 总结


前言

面向抽象原则是面向对象四大基本原则的第一条,其重要性不言而喻,面向抽象原则分为抽象类、接口以及面向抽象编程,由于篇幅有限本文我们主要细说接口(interface)的设计与应用,并通过引入案例的形式使概念更便于理解。除去介绍接口(interface)的设计与应用,同时对两个特别容易混淆的概念——抽象(abstract)类与接口(interface)进行对比。

在这里插入图片描述


一、接口(interface)的设计要点与抽象类的区别

  • 接口中只可以有 public 权限的 abstract 方法,不能有非 abstract 方法。注意这里接口与抽象类的区别,抽象类中既可以有 abstract 方法,也可以有非 abstract 方法
  • 接口由类去实现,即一个类如果实现一个接口就必须重写接口中的 abstract 方法,即将 abstract 方法重新声明,但必须去掉 abstract 修饰符,同时要保证声明的方法名字、返回类型、参数个数和接口中的方法完全相同。这一点与抽象类的非抽象子类重写父类 abstract 方法的要求是相同的
  • 接口回调。接口回调是指把实现接口的类的对象的引用赋给该接口声明的接口变量中,这时该接口变量就可以调用被类实现的接口中的方法。接口回调原理类似于抽象类中的上转型对象调用子类方法的过程

二、接口(interface)的应用实例

2.1、创建一个接口(interface)

首先我们创建一个接口(interface)Com,里面有一个 abstract 方法 sub(int x, int y),相应代码如下:

package com.bailu.principle;/** 接口中只可以有public权限的abstract方法,不能有非abstract方法*/
public interface Com {public abstract int sub(int x, int y);
}

2.2、创建实现接口的类

接着我们创建实现接口 Com 的类 ComImp,并且重写接口中的 abstract 方法 sub(int x, int y),将其实现为计算参数 x 与 y 的差,相应代码如下:

package com.bailu.principle;/** 接口由类去实现,一个类如果实现一个接口,就必须重写接口中的abstract方法* 重新将接口中的abstract方法声明,但必须去掉abstract修饰符去掉* 同时要保证声明的方法名字、返回类型、参数个数和接口中的方法完全相同* 这一点与抽象类的子类重写抽象类的abstract方法相同*/
public class ComImp implements Com {// 在重写Com接口中abstract方法的同时,将其实现为计算参数x与y的差@Overridepublic int sub(int x, int y) {return x - y;}
}

2.3、通过接口回调调用被类实现的方法

通过上述接口回调的原理,这里我们让 Com 接口声明的接口变量 com 存放 ComImp 类的对象的引用,那么这时 com 就可以调用 ComImp 类中实现的接口的方法 sub(int x, int y),相应代码如下:

package com.bailu.principle;/** 让Com接口声明的接口变量com存放ComImp类的对象引用* 那么com就可以调用ComImp类实现的接口中的方法*/
public class ApplicationImpl {public static void main(String[] args) {Com com;com = new ComImp();// com变量存放ComImp类的对象的引用int m = com.sub(6, 3);// com回调ComImp类实现的接口方法System.out.println(m);}
}

运行结果如下图所示:

在这里插入图片描述


总结

在本文给大家介绍了面向抽象原则概念中的接口的内容,说明了在开发中接口(interface)的设计要点,并在设计要点中与抽象(abstract)类的内容进行了对比,最为明显的一点区别就是,在抽象(abstract)类中既可以有 abstract 方法,也可以有非 abstract 方法,而在接口中只能有 public 权限的 abstract 方法,不能有非 abstract 的方法。另外,多注意在抽象类中提到的上转型对象与接口中的接口回调两个核心概念。

在这里插入图片描述


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

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

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

相关文章

Java 设计模式 Day3 之面向抽象原则:什么是面向抽象编程?面向抽象编程如何应用?

文章目录前言一、什么是面向抽象编程?二、传统场景的类设计2.1、项目场景设计2.2、传统类设计存在的问题三、采用面向抽象编程的类设计3.1、设计一个抽象类/接口3.2、采用上转型对象/接口回调调用子类方法3.3、重新设计子类/被实现类3.4、面向抽象编程的具体实现四、…

赢在 CSDN:我在 CSDN 的成长,“长风破浪会有时”,如何保证自己有持续写作的动力?

文章目录前言一、如何结缘 CSDN?1.1、我的“黑客之路”初探1.2、CSDN 一眼看得到的优势是什么?1.3、大学再遇 CSDN二、为什么开始在 C 站输出内容?2.1、“好记性不如烂笔头”2.2、记事本到“鼓励工具”三、C 站吸引我的地方是什么?3.1、海量…

华为工业云平台:制造业企业数据平台建设最佳实践分享

文章目录前言一、制造行业数字化转型和发展趋势1.1、制造行业数字化转型发展趋势1.2、制造行业数字化转型遇到的挑战1.3、政策牵引,加快数字化转型升级二、数字化转型-业务角度2.1、智能生产2.2、智能销售2.3、智能物流2.4、智能供应链2.5、智慧决策三、数字化转型-…

计算机本科毕业设计:毕业设计、论文要点及我们面对毕业答辩应持有的态度

文章目录前言一、对于毕业设计1.1、选题1.2、中期自查1.3、毕业设计答辩二、对于毕业论文三、我们应持有的态度3.1、人尽其才3.2、恪尽职守3.3、全力以赴3.4、做好自己总结前言 最近不断有很多学弟、学妹来找我咨询一些关于毕设、论文答辩的问题,一看日历四月份了&a…

Eclipse 答疑:Eclipse 使用 Amateras UML 创建类图点击 Finish 没反应解决方式汇总

文章目录前言一、问题产生场景1.1、Amateras UML 创建类图没反应二、问题原因分析三、问题定位及解决3.1、定位检查版本支持信息3.2、问题确认过程3.3、解决方式验证四、不想降低版本怎么办?总结前言 之前项目中在 Eclipse 使用 Amateras UML 创建类图点击 Finish 没…

DDoS 攻击与防护(二):DDoS 防护购买和使用入门指南,DDoS 防护服务有哪些应用场景?

文章目录前言一、如何选择 DDoS 高防和 DDoS 原生高级防护?二、如何购买和使用 DDoS 高防?2.1、购买 DDoS 高防2.2、DDoS 高防域名网站类业务接入流程2.3、配置防护域名2.4、上传证书2.5、选择实例和线路2.6、本地验证2.7、修改 DNS 解析2.8、放行高防回…

Java 大厂面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?

文章目录 前言一、何为面向对象编程的思想?二、面向对象的三大特征2.1、封装关系2.2、继承关系2.3、多态关系总结前言 从本文我们将开始《Java 大厂面试必刷题》系列的更新,Java 面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?这道题对于 Java 从业者来…

猿创征文|2022 互联网从业心得:“但愿人长久,千里共婵娟”,中秋先学会与自己内心团圆

文章目录前言一、“好雨知时节,当春乃发生”1.1、《性格修正:如何突破你的原生性格》1.2、“疼我孰知父母”1.3、“海内存知己,天涯若比邻”二、“读万卷书,行万里路”2.1、“读万卷书”2.2、“行万里路”三、“身体是革命的本钱”…

猿创征文|弹性云服务器 ECS:轻松上云第一步,如何根据应用场景购买和使用入门 ECS?

文章目录前言一、什么是弹性云服务器?1.1、ECS 介绍1.2、为什么选择 ECS?1.3、ECS 产品架构1.4、ECS 产品优势二、弹性云服务器的实例类型三、弹性云服务器的购买3.1、基础配置3.1.1、计费模式3.1.2、区域3.1.3、可用区3.1.4、CPU 架构3.1.5、规格3.1.6、…

猿创征文|不会代码也能玩开发?基于华为云 IoT 快速实现 0 代码体验物联网设备上云

文章目录前言一、物联网设备上云背景介绍二、实验环境准备三、智慧烟感器上云体验3.1、选择向导式极速体验3.2、对智慧烟感器进行产品定义3.3、定义目标设备标识码、注册设备3.4、根据需要选择设备演示包3.5、下载、解压设备演示包3.6、执行 bat 文件,运行设备演示包…

猿创征文|基于 AppCube 应用魔方:零代码手把手教你 5 分钟开发微信小程序

文章目录前言一、AppCube 应用魔方1.1、什么是 AppCube 应用魔方?1.2、为什么选择AppCube 应用魔方?二、项目实验环境与资源准备2.1、实验需求及环境介绍2.2、初次订购 AppCube2.3、曾订购过 AppCube三、进入 AppCube 全新零代码界面四、配置业务用户信息…

《软件质量保证与测试》第 6 章——系统测试 重点部分总结

文章目录 前言一、判断题二、简答题总结前言 软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或…

《软件质量保证与测试》第 9 章——测试自动化及其框架 重点部分总结

文章目录 前言一、判断题二、简答题总结前言 软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或…

java中间件是什么意思_数据库中间件漫谈

1.前言随着业务的发展,MySQL数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、…

kafka多个消费者消费一个topic_kafka:一文读懂消费者背后的那点quot;猫腻quot;

来自:z小赵前言经过前几篇文章的介绍,大致了解了生产者背后的运行原理。消息有生产就得有人去消费,今天我们就来介绍下消费端消费消息背后发生的那点事儿。文章概览消费者与消费组的“父子关系”。Repartition 触发时机。消费者与 ZK 的关系。…

MySQL 入门教程:初学者一学就会,零基础 MySQL 安装及增删改查入门

文章目录前言一、MySQL 的相关概念介绍二、Windows 下 MySQL 的配置2.1、MySQL 安装配置步骤2.2、MySQL 服务的启动、停止与卸载三、MySQL 脚本的基本组成四、MySQL 中的数据类型4.1、数字类型4.2、日期和时间4.3、字符串类型五、使用 MySQL 数据库5.1、登录到 MySQL5.2、创建一…

四大基本反应类型的关系_如何进入四大的咨询部门?

在会计行业,人人梦寐以求的职位,莫过于四大的财务咨询的岗位,第一咨询工作很高大上,第二没有其他职位那么幸苦,我从我的工作经历来讲讲,我是怎么进入咨询这个“真香”岗位的。首先,给大家说一个…

MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结

Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 几种解决方式小结 文章目录Could not open JDBC Connection for transaction; nested exception is java.sql…

vnc用户名 查看linux_vnc用户名未被识别,5步教你如何解决vnc用户名未被识别

在进行vnc使用时,很多小伙伴会出现用户名未被识别的情况,那如何解决vnc用户名未被识别呢?咱接着往下看。使用工具:IIS7服务器管理工具主程序界面图:官网地址:IIS7服务器管理工具作为IIS7服务器管理工具&…

IntelliJ IDEA 乱码:全网最全 4 种方法完美解决 IntelliJ IDEA 控制台中文乱码问题

文章目录前言一、修改当前 Web 项目 Tomcat Server 的虚拟机输出选项二、修改 IntelliJ IDEA 全局编码、项目编码、属性文件编码三、IntelliJ IDEA 中自定义虚拟机选项四、直接修改 IntelliJ IDEA 配置文件的编码信息五、修改成功乱码问题解决总结前言 IntelliJ IDEA 如果不进行…