Java中的抽象类与接口(1)
Java是一种纯面向对象的编程语言,类和对象是它的两个基本语言特性,学过Java的人都应该知道。但它还有另外两个比较容易搞混淆的特性:抽象类和接口。
我尝试着结合自身的经验,把这个问题搞清楚。受个人经验能力所限,出现纰漏在所难免,欢迎来辩。
先看一张表(《Java编程思想》中列出的关键特性):
拿一个实际的问题举例:
所有的生物都有吃东西和繁衍后代这样的共性接口,哺乳类动物具有胎生、肺呼吸、体温恒定等共性,这就可以用抽象类来表示,这样就不必与生物这个基类紧耦合。代码表示如下:
可以看到,人类继承了哺乳纲和灵长类的属性,同时也需要实现生物、动物接口和哺乳纲、灵长类的抽象方法。
至于抽象类和接口的区别,很多技术博客都写过,比如有些博主写得很好,比如门和报警器的例子、鸟和飞机的例子。不过在我看来,这都是从语言本身的特性来说明两者的区别,如果换一种例子、换一个场景,恐怕又会懵圈好像什么都说了,又好像什么都没说。
与其将语法解释的很明白,倒不如把它用明白,这其实就是新手和高手之间的最大区别:新手总想弄懂每一招每一式,但高手更注重肌肉记忆所产生的反馈循环,什么意思呢?
来看看好的实践是怎么用抽象类和接口的吧。
Java集合中部分类继承结构
这是JavaIO中的类继承结构图,这只是一部分,但用说明问题已经足够了。
可以看到,AbstractList是一个抽象类,实现了List接口,而List接口又继承自Collection接口。
抽象类AbstractList的部分定义是:
publicabstractclassAbstractListEextendsAbstractCollectionEimplementsListE{
。。。。。。
publicabstractEget(intindex);
。。。。。。
}
接口List的部分定义是:
publicinterfaceListEextendsCollectionE{
。。。。。。
Eget(intindex);
。。。。。。
}
同样可以很清楚地看到,抽象类和接口中都定义了Eget(intindex)这个方法,这是为啥?而且这个方法还是抽象类唯一的方法,为了这个方法,单独定义一个抽象类。因为作用不同。
接口中的Eget(intindex)是一种获取列表元素的操作,List这个接口集中了所有对列表可能的操作。
确切地来说,抽象类的更像是一种模板,规定了它的子类需要干的工作;而接口更像是一种约束,只要实现了接口的类,都要实现接口的方法。而且这种约束是可以不断往下传递的只要父类有了这种约束,那么子类也全都得遵守这种约束。如果这个约束被修改了,那么遵守它的类也全都要跟着修改。
所有的集合都要能够迭代、可增加、删除和获取元素,这就是一种约束,所以以接口形式表现。而不同类型的集合又有不同类型的方法,有些方法不需要工程师自己实现,仅仅可以作为默认的模板提供。而模板,是不需要实例化的(也最好禁止实例化,所以它只能是抽象的,不能具体化。抽象类本身也是可以没有抽象方法的)。
所以,多看一些优秀的源码,如JDK的源码、Spring的源码,多揣摩作者的设计意图,看多了,也就慢慢会了。
孕期吃葡萄,孩子的眼睛会亮吗?孕期吃什么对孩子的皮肤好?孕期吃葡萄,孩子的眼睛会亮,真是睁眼说瞎话,有些宝妈信以为真,为了宝宝有双大大的眼睛,孕期拼命的吃葡萄,结果宝宝的眼睛没怎么亮,还吃出了妊娠期糖尿病。要知道葡萄的含糖量是很高的,如
预产期是大年初一,老公是独生子,一家人只能在医院过年了,有没有什么好办法?有人说女人怀孕就变傻了,我恐怕你也差不多吧。本来初为人母,那是一件多么高兴多么激动的事儿啊。这跟大年初一生还是大年三十生有那么重要的关系吗?至于预产期准不准,是否做剖腹产,另当别论
迷你世界怎么获得迷你币?江叔哈喽,亲爱的小伙伴。刷迷你币是不可以的,但是可以多多参加官方的活动,或者来江叔的抽奖活动哦,皮肤迷你豆迷你币坐骑都会有的哦!迷你币的获取方式可以充值,也可以抽奖。江叔你所说的刷
大一新生有必要买笔记本电脑吗?很有必要!我刚上大学的时候,也觉得大学是去学习的,带电脑干什么,所以最初没有买电脑。但是到了学校后你就会发现,课程学习,你需要电脑完成作业,你需要电脑有时候你参与一个班级的活动,还
公司效益不好被裁了,去面试时,离职原因说公司效益不好裁员,还是个人原因主动离职?为何?针对题主的这个问题,应该理性认知趋利避害是我们每个人的本性。只要是不对他人造成伤害和影响,善意的谎言也是无可厚非,可以被人接纳和理解,所以还是说自己主动离职为好。给大家分享一个我身
手机炒股和电脑炒股的区别有哪些?我是一个高频交易者,个人认为最大的区别是手机炒股几乎每次报单你都难获取更全面的市场同步信息,每次买卖你都会有细小的价差损失,久而久之可能就是你投资生涯的全部利润。如果你是一个深入研
梦幻西游电脑版怎样一天赚1500万梦幻币?早啊!悟空。我是博主,17年梦幻西游游戏史的骨灰玩家。梦幻西游这款游戏作为一款经典的2D回合制游戏能存在世界游戏排行榜前三,显然是有它的魅力所在的。最大的特点就是藏宝阁(CBG)了
中医可以治好抑郁吗?中医治疗抑郁症,药到病除!抑郁症完全可以通过中医得到很好的治疗,甚至经过一段时间治疗之后,康复甚至痊愈。抑郁症在中医内科里面,被命名为郁证。他的发病激励beenin有好多种,如果你
每年中医专业毕业的学生都干嘛去了?看个人的追求。在现有的医疗体制内,医学生不考研很难进得了大医院,尤其是中医医院数量少,且中医院都西化了,有很多在中医院上班的医生都是西医出身的,因此提高学历成为大多数人的选择,要想
有哪些西医不能解决,却用中医轻松治好的病例?邻居的一个姑姑,60岁那年不幸患上了让人闻风丧胆的咽喉癌。当时已是到了中度严重,她在亲人的护送下,到省级医学院治疗大约4O天左右,当时的医生也出尽手段,还是举手投降了。在花光近10
你们有什么病是被中医治好的吗?慢性肾炎,血尿长达一年之久,一味中药彻底治好了。十年前,我二十几岁,时常熬夜看电子书,吃路边的小吃不良生活习惯,最后得了慢性肾炎。一年多的时间,辗转各大医院,药没少吃,院没少住,钱
项羽为什么要恢复分封制?他当时的处境其实很尴尬!项羽在巨鹿之战中消灭了秦军主力,后引兵西屠咸阳,杀秦降王子婴,烧秦宫室。彻底灭亡秦国。之后不顾楚怀王熊心先入定关中者王之的约定,尊楚王熊心为义帝,和各国诸侯将相自行分封。项羽为什么
留钱做什么林则徐不仅是一位严禁鸦片抗击殖民列强的民族英雄,也是一位勤政为民守法奉公的好官。他的书房里挂着这样一副对联子孙若如我,留钱做什么?贤而多财,则损其志子孙不如我,留钱做什么?愚而多财
霍光星光大道的狂飙之路政治斗争是各种力量错综复杂的较量,但历史的聚光灯一般都只照耀在极个别的人身上。霍光是那个时代的焦点人物。霍光是霍去病的同父异母弟,不要小看这一异,差别大了去了。霍去病的母亲是卫子夫
阿根廷要求英国重启马岛主权谈判,英方抵制称阿方的决定令人失望马岛主权之争的历史背景阿根廷为什么要求英国重启谈判英国为什么拒绝阿根廷的要求马岛主权之争的未来展望马岛主权之争的历史背景马岛主权之争是一场持续了近两个世纪的南大西洋上的地缘政治博弈
Sci。Adv。水凝胶贴片通过运动润滑抑制机械活化实现肌腱愈合仅供医学专业人士阅读参考点击右上方关注,准时接收每日精彩内容推送。摩擦和转化生长因子1识别引起的成纤维细胞的机械活化是组织粘连的主要原因之一。有鉴于此,上海交通大学崔文国教授等人开
英特尔中国战略升级不会减少对中国的投资环球网科技报道记者李文瑶近日,英特尔中国宣布战略升级,并首次阐述了英特尔中国2。0战略。在英特尔公司高级副总裁英特尔中国区董事长王锐看来,进入2023年,中国市场经济发展潜力巨大,
芜湖一卡通交通一码通上线应用近日,芜湖一卡通交通一码通(以下简称交通一码通)上线应用,市公交集团运营的165条线路共1600余辆公交车辆均支持交通一码通扫码乘车。交通一码通是在市政府及相关部门规划指导下,由市
这才是真正的全面屏设计!努比亚Z50Ultra美出新高度自从努比亚手机官方微博正式宣布将于3月7日下午14点推出全新的努比亚Z50Ultra后,目前官微已经通过预热海报的方式先后透露出了许多关于新品的亮点,尤其是采用了真全面屏设计的努比
程序员头痛起名根治指南作者marinewu,腾讯PCG客户端开发工程师导语基于Readability的出题阅卷经验的一些不完全的具体的命名指南。ThereareonlytwohardthingsinCo
张艳等含水层页岩对潮汐响应渗漏模型的影响页岩具有易碎致密和各向异性的特性,由于其极低的孔隙度和渗透率(在104到103mD之间),以及与高孔高渗围岩共同作用,导致地层物性呈现各向异性和非均质性的特点。因此,含有页岩的含水
从业者的视角讲讲为什么一定要挺华为这样的企业?自2019年起,美国以举国之力对以华为为代表的中国企业实施了多轮的制裁,甚至蛮横地扣押了孟晚舟,企图遏制中国的发展。美国的做法激起了广大国人的强烈愤慨,自此,在中国最受国人尊重的企