大家好,今天小编关注到一个比较有意思的话题,就是关于java语言支持多接口吗的问题,于是小编就整理了4个相关介绍Java语言支持多接口吗的解答,让我们一起看看吧。
JAVA为什么要区分extends和implements?
不请自来~
extends和implements都是Java最基础的知识点,本来没有必要回答这个问题,但是看了一下别人的答案,基本上还是讲基本的概念,念书谁不会啊,都没有讲到两者的真正作用,特别是implements,我给大家分享分享我的体会。
implements的重要作用之一,就是为了解耦。这是什么意思呢,给大家举个例子。
由于Java的多态,接口的调用者,只需要调用接口就好了,具体接口中的功能,就让接口的实现者去实现好了。这样的好处是,避免接口的调用方直接参与接口逻辑的实现,避免调用方和实现方的关系过于紧密(修改或增加实现方的时候,还需要修改调用方的代码),这就是解耦。要注意:
如果一个接口就一个实现的话,没有必要过度设计,只会加大代码的复杂程度(不过需求未来的变化,是预测不到的)。
只有一个实现的话,也会存在迁移的问题,比如现在使用的Oracle数据库,准备迁移到Mysql数据库上,使用面向接口编程的话,只修改数据库相关的实现即可。
接口的实现不是new出来的。
举个例子(可能不是非常恰当,主要为了理解),这幅图大家应该很常见吧,这个是今日头条的登录页面:
这是一个非常好的问题,在Java的学习和认知过程中,好的问题能让学习者迅速掌握Java语言的脉络从而建立Java编程思维。
那么Java为什么要区分extends和implements呢?在我看来有以下几点原因:
第一,定位不同。extends的定位是“扩展”(类扩展类、接口扩展接口),而implments的定位是“实现”(类实现接口)。在Java中,扩展是同一类事务之间的关系,而实现则是实体和抽象之间的关系。但是这里面有一个例外,那就是“抽象类”,抽象类也称为“半抽象”,其实抽象类采用implments在逻辑上也是能讲得通的,但是Java为抽象类赋予的定义是“类”而不是“接口”,所以这也就能说得通了。
第二,用法不同。extends可以用于类与类之间,也可以用于接口与接口之间,但是extends用于类之间与用于接口之间是不同的。extends用于类之间更倾向于继承,而用于接口之间更倾向于扩展,继承只能是单继承,而扩展则可以多扩展。implements则是类与接口之间的应用(实体与抽象之间的应用),一个类可以同时实现多个接口而不影响结构的清晰性。
这个问题涉及到面向对象的三个基本概念(继承,多态,封装)中的继承和多态。请听我慢慢道来。
继承
究其本质继承有两个目的。
- 统一接口使子类可以被重载,这是通过抽象类(Abstract)实现的。在讲到多态的时候,再详细说说接口的应用。
- 由父类保证子类的一致性,这是通过extends实现的。教科书上喜欢用猫狗继承了动物的共性来解释子类继承父类的概念。我倒认为这个说法容易导致混乱。讲一个真实的事例,我需要对同一组数据做两种输出报表,一个是网页而另一个是Excel报,重要的事情是保证这两个报表的数据一致。因此需要把数据部分做成父类,输出部分做成两个子类。可我的程序员只考虑了报表这一共通属性,反其道而行之,做出来的程序Bug无数致使项目一度失控。
多态
多态的目的是实例化时可灵活加载不同的类而无需变更接口。这是面向对象程序语言的一大特色。多态有两种实现方法。
- 定义抽象类通过多个子类的继承实现多态。这个方法的好处是可以保证子类处理的一致性。这一点在上面已经解释过了。这样的重载被限制在单一的父类上,有些不够灵活。
- 定义interface通过多个类的implements实现多态。这个方法可以最大限度地把多态的特性发挥出来。需要注意的是,虽然类的接口相同但处理是完全独立的。
两个实现重载的方法各有利弊,可根据需要灵活运用。
小结
概括起来,extends实现了继承,implements实现了多态,对Java来说两个语句都很重要,不可或缺。通过运用继承和多态这两个特性,以Java为代表的面向对象的程序语言可以实现程序架构的继承(抽象工厂模式是个典型的例子),在构建大型系统方面展现了巨大的优势。
对设计模式有兴趣的小伙伴可以提出问题,我有很多故事可以分享哦。
如果题主是学java编程,这样的问题并不好(原因后面解释)。如果是挑战java规范,答案就简单了,者就是一种设计。
java语言诞生于面向对象编程理论与实践都相对成熟的年代。java语言开发者改良了对象多重继承思想,代之以可以扩展(extends)的接口(interface)。接口的方法缺省条件下是抽象的(aberstract)。
一个类(class)可以实现(implements)0到多个接口,但是只能扩展(extends)一个类。你觉得(implements)和(extends)的语义上有重叠吗?
说这个问题不好的原因是,只有上来就试图通过调试代码来学习java语言,才会遇到题主的问题吧?最简单的java语法介绍都会说到本文前边的语法特点吧?
作为一个C#的程序员我来解释下。
其实在C#领域是可以extends多个类的这点和java不同,但是依旧有implements。
所以说这个设计是为了多继承是很片面的,因为Cs能做的继承多个类Java设计者肯定也可以做到。
言归正传。一般说继承,主要是抽象类和实体类。类的特点就是,有属性,有方法,可以把功能抛给子类实现也可以自己提供通用属性和方法给子类服务。也就是说,所有的子类都具备了父类的特征,都是需要借助父类帮助才能实现功能的类,父亲给了子女呵护,但是同时,也有父亲强加给子女的东西。一开始父亲只是满足孩子的想法,后来父亲一想,天冷了,要穿秋裤。然后给在子女未知的情况下买了一堆秋裤。甭管你喜不喜欢,你必须穿着就对了。
我对接口的理解就是说明与目录,我要干某件事,但是我不知道步骤,于是接口告诉我你需要准备什么就行了。我一看能接受,就去做了,自己砍柴,自己挑水,虽然辛苦,但是怎么做的都是我掌握的。忽然,有一天目录上突然添了一项,穿秋裤,添加人告诉我,要么你穿秋裤,要么你换其他秘籍试试?要么你随便应付下,不过后果自负。不管怎么说,你给个交代。选择权完全在子类手上,你可以和大家一样,也可以做不一样的烟火,你只要应付完接***代你做的事,没有什么能控制你的。
码了那么多,好像跑题了?算了,就这样吧。
JAVA中的接口有什么作用?
1、定义接口的重要性:在Java编程,abstract class 和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才使得Java成为面向对象的编程语言。
2、定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
3、有利于对代码进行维护:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现现有的类已经不能够满足需要,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
4、保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。
JAVA中的接口有什么作用?
1、定义接口的重要性:在Java编程,abstract class 和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才使得Java成为面向对象的编程语言。
2、定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
3、有利于对代码进行维护:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现现有的类已经不能够满足需要,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
4、保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。
为什么说java中接口是最能体现多态的概念?
多态本质概念应该是一种类型有多种表现形态,具体到程序中就是一个类型定义的同一个操作有多种逻辑实现。Java中接口就是一种非常纯粹的一种类型,它只是定义这个类型能干什么,并没有定义怎么干,而只有实现它的具体实现类才定义了怎么干(具体逻辑)。这恰恰与多态高度相符。实际上c++里面的只有纯虚函数的类与Java接口就非常相似了,区别在于Java有接口这一个概念。
到此,以上就是小编对于java语言支持多接口吗的问题就介绍到这了,希望介绍关于java语言支持多接口吗的4点解答对大家有用。