这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【
为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
】
大家好,我是IT修真院郑州分院第12期的学员李雨航,一枚正直纯洁善良的后端程序员,今天给大家分享一下,修真院官网java(职业)任务1,深度思考中的知识点——为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
1.背景介绍
类是属性和方法容器,但是这些属性和方法没有任何区别的堆积在一起,当开发人员要寻找某个方法时,将很不方便,而且直接使用实现类导致父类-子类间出现强耦合,很容易导致软件复杂度失控,
这个时候,接口出现了,接口的出现就是为了解决这个问题。
2.知识剖析
1.接口:
接口是一种特殊的抽象类,是一个比抽象类还抽象的类,这种抽象类中只包含常量与方法的定义,而没有变量和方法的实现,接口,接口里所有的方法全是抽象方法。
2.接口中成员的特点
(1)Java 为了保证数据安全性是不能多继承的,也就是一个类只有一个父类。
但是接口不同,一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多继承的缺陷。
(2)接口是抽象类的延伸,它可以定义没有方法体的方法,要求实现者去实现。
接口的所有方法访问权限自动被声明为 public
(3)接口中可以定义“成员变量”,会自动变为 public static final 修饰的静态常量
可以通过类命名直接访问:ImplementClass.name
不推荐使用接口创建常量类
(4)实现接口的非抽象类必须实现接口中所有方法,抽象类可以不用全部实现
接口不能创建对象,但可以申明一个接口变量,方便调用
(5)完全解耦,可以编写可复用性更好的代码
接口的作用
1.重要性。在java中,abstract class和interface是支持抽象类定义的两种机制。赋予了Java面向对象的能力。
2.简单、规范性。大型项目,通过定义接口可以告诉开发人员需要实现的业务,同时限制了命名规范。
3.维护、扩展性。接口定义了功能,然后通过定义类来实现功能。这样需要使用接口的功能时就是使用这个接口去引用实现它的类。这样当接口功能需要更新时,对应功能上来讲,只需要更换引用的实现类。
4.安全、严密性。接口是实现软件松耦合的重要手段,它描述了系统对外的所有服务,而不涉及任何具体的实现细节。
抽象类
(1)抽象类:抽象类的初衷是“抽象”,即规定这个类“是什么”,具体的实现暂不确定,是不完整的,因此不允许直接创建实例。
(2)抽象类是由子类具有相同的一类特征抽象而来,也可以说是其基类或者父类
抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为 public
(3)抽象类不能用来创建对象
(4)抽象方法必须由子类来实现
如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法,如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类
(5)抽象类还是很有用的重构工具,因为它们使得我们可以很容易地将公共方法沿着继承层次结构向上移动
实现类
(1)实现类是针对接口来讲的
是实现接口中约定的内容,意思是说,接口中定义规范,实现类来确定规范如何运行的。
3.常见问题
1.接口和抽象类的共性
共性:
不断的进行抽取,抽取出抽象的,没有具体实现的方法,都不能实例化(不能创建对象)
接口和抽象类与类的关系
(1)类与接口是实现关系,而且是多实现,一个类可以实现多个接口,类与抽象类是继承关系,Java中的继承是单一继承,多层继承,一个类只能继承一个父类,但是可以有爷爷类
(2)区别2: 成员
a.成员变量
抽象类可以有成员变量,也可以有常量
接口只能有常量,默认修饰符public static final
b.成员方法
抽象类可以有抽象方法,也可以有非抽象方法
接口只能有抽象方法,默认修饰符 public abstract
c.构造方法
抽象类有构造方法,为子类提供
接口没有构造方法
4.编码实战
5.扩展思考
多态概述
多态是继封装、继承之后,面向对象的第三大特性。
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。 Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
如Student类可以为Person类的子类。那么一个Student对象既可以赋值给一个Student类型的引用,也可以赋值给一个Person类型的引用。
最终多态体现为父类引用变量可以指向子类对象。
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
6.参考文献
https://blog.csdn.net/JAVA528...
https://blog.csdn.net/v_nbsp/...
7.更多讨论
1.抽象类的运用方法?
答:抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。只能得到继承了抽象类的对象。
2.已经有抽象类了为什么还要使用接口?接口和抽象类的应用场景分别是什么?
答:abstract class的应用场景。一句话,在既需要统一的接口,有需要实例变量或省缺的方法的情况下,就可以使用它。最常见的有:
A。定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
B。某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还需要类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
C。规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己的特定的状态实现特定的功能。
3.一个接口只能对应一个实现类吗?
答:接口可以有无数的实现类,主要这个类在声明的时候声明implement某个接口。接口自身对应它的实现类只有一个要求,实现接口中的所有抽象方法。
分享到此结束
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。