当前位置:网站首页>面向接口编程
面向接口编程
2022-07-07 14:27:00 【大林子先森】
- 前置知识:什么是接口
- 接口(英文:interface),是Java编程预研中的一个抽象类型,是抽象方法的集合,一个类通过继承接口的方式,从而实现继承接口的抽象方法。
- 接口与普通类的区别
- 类描述对象的属性和方法,接口则定义类要实现的方法
- 接口每月构造方法,无法被实例化,但是可以被实现,一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
- 接口中可以有变量,但是接口中的变量会被指定为public static final变量
- 接口支持多继承
- 接口是隐式抽象的,接口中的每一个方法都是隐式抽象的,接口中的方法回被隐式的指定为public abstract
- 接口与抽象类的区别
- 抽象类可以提供某些方法的部分实现
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型
- 接口中不能含有静态代码块和静态方法,而抽象类可以。JDK1.8之后,接口可以有静态方法和方法体了
- 一个类只能继承一个抽象类,但是可以实现多个接口
- 抽象类设计出来的目的是为了抽取出某一个种类的一些共有特性或者默认行为,以达到代码复用的目的。而接口则是为了规定某一种标准而设计出来,它强调的是规范,在面向对象语言中体现就是多态性的使用。
- 分支主题
- JDK8 --接口默认方法
- 定义
- 接口可以有实现方法,而且不需要实现类去实现其方法,在定义接口时,只需在方法名前面加个 default 关键字即可实现默认方法
- 语法格式
- public interface MyInterface{
- default void print(){
- // 我是默认方法
- }
- }
- 冲突解决
- 问题描述:如果一个类继承了多个接口,而这多个接口内部定义了同名的默认方法
- 1)类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。
- 2)如果无法依据第一条进行判断,那么子接口的优先级最高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体。
- 3)最后,如果还是无法判断,继承了多个接口的类必须通过显示覆盖和调用期望的方法,显示的选择使用哪一个默认方法的实现。
- 定义
- JDK8--接口声明静态方法
- 语法格式
- public interface Vehicle {
- default void defaultMethod(){
- System.out.println('我是默认方法!');
- }
- // 静态方法
- static void staticMethod(){
- System.out.println('我是静态方法!!!');
- }
- }
- 语法格式
- 前置知识:面向过程编程POP
- 是一种以过程为中心的编程思想,分析出解决问题所需要的步骤,然后利用函数把这些步骤一步一步进行实现,在使用的时候一个一个依次调用直至问题解决
- 优点
- 将问题拆解成一个个步骤、类似流水线一样,一步步执行,将复杂的问题流程化进而简单化。性能比面向对象编程高,面向对象编程中类调用过程需要加载、实例化,资源消耗更大;对向性能要求高的比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发
- 缺点
- 没有面向对象编程易维护、易复用、易扩展
- 适用场景
- 性能要求较高的系统开发中
- 前置知识:面向对象编程OOP
- 面向对象则是一种以对象为中心的编程思想,通过分析问题,分解出一个一个的对象,对象中包含具体的属性和行为,然后通过不同对象之间的调用来组合解决问题。
- 优点
- 1)易理解:采用面向对象思想设计开发,更符合人的思考方式,可读性高。
- 2)易维护:面向对象有封装、继承、多态性的特性,即使需求有变动,需要维护的更多是局部模块,维护起来更加方便和更低成本。
- 3)易扩展:面向对象有封装、继承、多态性的特性,在设计系统阶段可以设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展。
- 4)易复用:也是同理,因为面向对象的三大特性,使得通用代码可以更简单的复用,提高开发效率。
- 缺点
- 性能会比面向过程低,编程复杂度较高
- 适用场景
- 用户需求经常变化,互联网应用,游戏,企业内部应用
- 什么是面向接口编程
- 面向接口编程(Interface Oriented Programming:OIP)是一种编程思想,接口作为实体抽象出来的一种表现形式,用于抽离内部实现进行外部沟通,最终实现内部变动而不影响外部与其他实现交互

边栏推荐
- Tragedy caused by deleting the console statement
- laravel 是怎么做到运行 composer dump-autoload 不清空 classmap 映射关系的呢?
- Geoserver2.18 series (5): connect to SQLSERVER database
- 偶然升职的内心独白
- laravel中将session由文件保存改为数据库保存
- C语言进阶——函数指针
- TiDB For PostgreSQL和YugabyteDB在Sysbench上的性能对比
- Have fun | latest progress of "spacecraft program" activities
- Performance measure of classification model
- Binary search tree (basic operation)
猜你喜欢

如何快速检查钢网开口面积比是否符合 IPC7525

二叉搜索树(特性篇)
![[flower carving experience] 15 try to build the Arduino development environment of beetle esp32 C3](/img/8f/ca9ab042916f68de7994d9f2124da9.jpg)
[flower carving experience] 15 try to build the Arduino development environment of beetle esp32 C3

Description of vs common shortcut keys

Imitate the choice of enterprise wechat conference room

华东师大团队提出,具有DNA调控电路的卷积神经网络的系统分子实现
![[Android -- data storage] use SQLite to store data](/img/f6/a4930276b3da25aad3ab1ae6f1cf49.png)
[Android -- data storage] use SQLite to store data

【MySql进阶】索引详解(一):索引数据页结构

The difference and working principle between compiler and interpreter

Have fun | latest progress of "spacecraft program" activities
随机推荐
laravel怎么获取到public路径
AutoLISP series (3): function function 3
JS modularization
Sysom case analysis: where is the missing memory| Dragon lizard Technology
01tire+链式前向星+dfs+贪心练习题.1
TiDB For PostgreSQL和YugabyteDB在Sysbench上的性能对比
无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
What else can an ordinary person do besides working in a factory to make money?
【DesignMode】外观模式 (facade patterns)
PHP realizes wechat applet face recognition and face brushing login function
OpenGL personal notes
spark调优(三):持久化减少二次查询
Leetcode-136- number that appears only once (solve with XOR)
[vulnhub range] thales:1
How to query the data of a certain day, a certain month, and a certain year in MySQL
二叉搜索树(特性篇)
【C 语言】 题集 of Ⅹ
【医学分割】attention-unet
Deep listening array deep listening watch
[summary of knowledge] summary of notes on using SVN in PHP