文章目录

  • 前言
  • 一、接口(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 的方法。另外,多注意在抽象类中提到的上转型对象与接口中的接口回调两个核心概念。


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

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

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

    文章目录 前言 一.什么是面向抽象编程? 二.传统场景的类设计 2.1.项目场景设计 2.2.传统类设计存在的问题 三.采用面向抽象编程的类设计 3.1.设计一个抽象类/接口 3.2.采用上转型对象/ ...

  2. Java 设计模式 Day1 之面向抽象原则:抽象(abstract)类的设计与应用分析

    文章目录 前言 一.抽象(abstract)类的设计要点 二.抽象类的应用实例 2.1.创建一个抽象类 2.2.创建抽象类非抽象子类 2.3.通过上转型对象调用子类方法 总结 前言 面向抽象原则是面向 ...

  3. java的面向抽象原则

    java的面向抽象原则 - 未使用抽象原则 圆面积的计算 Circle.javapublic class Circle {double r;Circle(double r){this.r = r;}p ...

  4. 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则

    依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...

  5. java设计模式3,里氏替换原则

    目录 一.里氏替换原则定义 二.里氏替换原则的作用 三.违背原则场景 四.里氏替换原则改变代码 1.抽象人物类 2.哪吒子类 3.敖丙子类 五.关注公众号哪吒编程,回复1024,获取Java学习资料, ...

  6. 里氏替换原则——举例说明Java设计模式中的里氏替换原则

    里氏替换原则--举例说明Java设计模式中的里氏替换原则 1. 前言 官方定义: 2. 举例说明 2.1 例子介绍 2.2 反例 2.2.1 类图说明 2.2.2 代码说明 2.2.3 测试 2.2. ...

  7. 【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝

    目录 说明 实现方式 自问自答 其他链接 说明 五大创建型模式之一,其他还有单例模式.原型模式.建造者模式.工厂模式. 抽象工厂模式(Abstract Factory Pattern):定义了一个in ...

  8. Java设计模式总结篇:七大原则以及23种设计模式简单介绍

    java设计模式 一.前言 二.七大原则 1.单一原则 2.开闭原则 3.里氏替换原则 4.接口隔离原则 5.依赖倒置原则 6.迪米特法则 7.合成复用原则 三.23种设计模式 1.单例模式(Sing ...

  9. 二、java设计模式之工厂方法+抽象工厂模式(创建型设计模式)

    创建型设计模式-工厂模式和应用 工厂模式介绍: 它提供了一种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 例子: 需要购买一辆车,不用管 ...

最新文章

  1. 最小二乘法,python3实现
  2. 了解linux内核必读的5本书
  3. 在MFC对话框中快速集成三维控件
  4. php5.3中ZendGuardLoader与wincache冲突问题的解决方法
  5. 用实例讲解Spark Sreaming--转
  6. VTK:Video之OggTheora
  7. jmeter测试TCP服务器/模拟发送TCP请求
  8. 为了异常安全(swap,share_ptr)——Effecive C++
  9. Linux 命令(21)—— cd 命令(builtin)
  10. ML面试1000题系列(91-100)
  11. ffmpeg filter 实现画面旋转
  12. JavaScript数组的某些操作(二)
  13. 新中大财务软件V5.08安装
  14. Linux dev是什么文件,linux dev文件详解
  15. java基于ssm+mysql学生课程表现作业评价系统
  16. 华强北山寨“AirPods 3”出圈,油管博主直夸好
  17. uboot和Linux内核移植
  18. 嵌入式系统下的Microwindows实现
  19. 用xlwt和xlrd在不修改Excel单元格格式的情况下修改单元格内容
  20. 「正在直播」2018人工智能怎么玩?中科院专家山世光、360首席科学家颜水成等技术大咖来教你!...

热门文章

  1. Cloud一分钟 | 电商月将至,腾讯云DCDB助力电商企业应对支付洪峰
  2. larvel php restful_laravel 实现一个简单的 RESTful API
  3. docker yum 安装
  4. Git 版本对比 idea图形化版本
  5. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02
  6. 工作流实战_02_flowable 流程模板导入
  7. 关于JavaBean
  8. android 16 登陆,那些年我们一起养过的电子鸡登陆Android平台
  9. mysql修改表结构例子_mysql修改表结构方法实例详解
  10. qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8