下面我们来看看接口,假使我研发出来一台会飞的汽车“伯特莱斯”(Bote-Royce),在程序中定义如下:
class BoteRoyce extends Car {
//…省略通用特性
/**
- 可以飞
*/
void fly() {
System.out.println(“假装会飞~”);
}
}
看起来没问题:
BoteRoyce extends Car
:表达这是一辆汽车;fly()
方法:体现这车可以飞。
但是,随着技术发展,出现了众多可以制造飞行汽车的厂商,难道每一个可以飞的汽车都去定义一个 fly()
方法?
心想这还不简单,在抽象类 Car
中定义一个抽象方法 abstract void fly()
让子类去实现,不就可以了吗?
No No No… 正如不是所有牛奶都叫特仑苏一样,不是所有汽车都会飞,飞行功能不是汽车的通用特性。将 fly()
方法定义在 Car
中,显然违背了“抽象类用来捕捉子类的通用特性”这一原则。
在这种场景下,解决方案之一就是使用接口,如下:
/**
- 飞行器接口
*/
public interface Aircraft {
//定义抽象方法
void fly();
}
类 BoteRoyce
的定义修改如下:
/*
- 实现 Aircraft 接口,表示具备飞行器能力
*/
class BoteRoyce extends Car implements Aircraft {
/**
- 覆写接口方法,实现飞行能力
*/
@Override
void fly() {
System.out.println(“假装会飞~”);
}
}
再有其他品牌的飞行汽车,都可以通过 extends Car implements Aircraft
实现飞行能力。
上述定义的 interface Aircraft
即为接口,我们通常使用接口对行为进行抽象。
3. 接口和抽象类的区别
关于二者的区别,可以结合前面的例子,来加深理解。
抽象类是对类本质的抽象,表达的是 is a 的关系,比如:BMW
is a Car
。抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类去实现。
而接口是对行为的抽象,表达的是 like a 的关系。比如:Bote-Royce
like a Aircraft
(像飞行器一样可以飞),但其本质上 is a Car
。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁、是如何实现的,接口并不关心。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
上述【高清技术脑图】以及【配套的面试真题PDF】可以点击我的GitHub免费获取
本文在开源项目:[https://github.com]中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。