摘要:第五章接口接口概述常见的猫狗案例猫和狗它们仅仅提供一些基本功能。如果一个类继承了某个抽象类,它的子类则一定是抽象类的种类,而接口实现则是有或者没有具备或者不具备的关系,比如狗是否能钻火圈,能则可以实现这个接口,不能就不实现这个接口。
第五章 接口 5.1 接口概述
常见的猫狗案例 猫和狗它们仅仅提供一些基本功能。
但有一些不是动物本身就具备的,比如:猫钻火圈,狗跳高等功能
是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。
5.2 接口特点 A:接口用关键字interface表示[public] interface 接口名{ }
接口中的方法不能具体实现,接口中的方法必须为抽象方法
接口中一般不定义变量,因为接口中的变量会被默认指定为 public static final 变量(只能是)
B:类实现接口用implements 表示class 类名 implements 接口1,接口2,[....]{ }
1.一个类(非抽象类)可以遵循多个接口,并且需要实现(重写)该接口中所有的方法
2.子类为抽象类的意义不大
5.3 接口的成员特点只能是常量
默认修饰符:public static final
没有构造方法
只能是抽象的
默认修饰符:public abstract
5.4 抽象类和接口的区别(重要)我们从我们实际设计场景中来切入这个话题
先来举一个简单的例子:
狗都具有 eat() 、sleep() 方法,我们分别通过抽象类和接口定义这个抽象概念
//通过抽象类定义 public abstract class Dog { public abstract void eat(); public abstract void sleep(); }
//通过接口定义 public interface Dog { public abstract void eat(); public abstract void sleep(); }
但是我们现在如果需要让狗拥有一项特殊的技能——钻火圈 DrillFireCircle(),如何增加这个行为呢?
思考:
将钻火圈方法与前面两个方法一同写入抽象类中,但是这样的话,但凡继承这个抽象类狗都具有了钻火圈技能,明显不合适
将钻火圈方法与前面两个方法一同写入接口中,当需要使用钻火圈功能的时候,就必须实现 接口中的eat() 、sleep() 方法(重写该接口中所有的方法)显然也不合适
那么该如何解决呢 ? 我们可以仔细想一想,eat和sleep都是狗本身所应该具有的一种行为,而钻火圈这种行为则是后天训练出来的,只能算是对狗类的一种附加或者延伸, 两者不应该在同一个范畴内,所以我们考虑将这个多带带的行为,独立的设计一个接口,其中包含DrillFireCircle()方法, Dog设计为一个抽象类, 其中又包括eat() 、sleep() 方法.
一个SpecialDog即可继承Dog类并且实现DrillFireCircle()接口
下面给出代码:
//定义接口,含有钻火圈方法 public interface DrillFireCircle() { public abstract void drillFireCircle(); } //定义抽象类狗类 public abstract class Dog { public abstract void eat(); public abstract void sleep(); } //继承抽象类且实现接口 class SpecialDog extends Dog implements drillFireCircle { public void eat() { //.... } public void sleep() { //.... } public void drillFireCircle() () { //.... } }总结:
继承是一种 "是或不是"的关系,而 接口 实现则是 "有或没有"的关系。如果一个类继承了某个抽象类,它的子类则一定是抽象类的种类,而接口实现则是有或者没有、具备或者不具备的关系,比如狗是否能钻火圈,能则可以实现这个接口,不能就不实现这个接口。
结尾:如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^
如果能帮到你的话,那就来关注我吧!
在这里的我们素不相识,却都在为了自己的梦而努力 ❤一个坚持推送原创Java技术的公众号:理想二旬不止
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74783.html
摘要:关于抽象类和接口的初步理解什么是抽象类抽象类是指在前加了关键字且存在抽象方法在类方法关键字前加了关键字的类。抽象类不能被直接实例化。抽象类中只定义或部分实现子类需要的方法。抽象类提供了具体实现的标准,而接口则是纯粹的模板。 关于抽象类和接口的初步理解 什么是抽象类 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 ab...
摘要:最近在学习安全相关的一些知识,目前对安全也只有了一些浅显的理解,下面记录我的一些理解。防御攻击的方法主要是修改数据的接口,尽量使用请求使用同源策略推荐的文章安全之攻击其实还讲了其他的几种方法,但是都没接触过,不太理解,所以没有写下来。 最近在学习web安全相关的一些知识,目前对web安全也只有了一些浅显的理解,下面记录我的一些理解。因为对这一块懂的东西不是很多,有些地方可能写的不对或者...
摘要:前言本章我们要讲解的是五大原则语言实现的第篇,依赖倒置原则。当应用依赖倒置原则的时候,关系就反过来了。在当静态类型语言的上下文里讨论依赖倒置原则的时候,耦合的概念包括语义和物理两种。依赖倒置原则和依赖注入都是关注依赖,并且都是用于反转。 前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第5篇,依赖倒置原则LSP(The Dependency Invers...
摘要:更多关于接口和抽象类的概念知识,可自行查阅相关文档。抽象类及其作用抽象类,顾名思义,即类的抽象。而接口是对行为的抽象,表达的是的关系。相比于抽象类,接口能最大限度的减少对外暴露的接口,并隐藏细节,更符合这一原则。 showImg(https://segmentfault.com/img/bVbkOJy?w=1295&h=595); 作者:伯特出处:github.com/ruicbAnd...
阅读 1446·2021-09-10 11:27
阅读 2400·2019-08-30 15:53
阅读 1316·2019-08-30 13:10
阅读 2968·2019-08-30 11:09
阅读 1073·2019-08-29 17:23
阅读 663·2019-08-29 17:05
阅读 2943·2019-08-29 15:10
阅读 2338·2019-08-29 13:22