接口与类的关系

作者&投稿:离败 (若有异议请与网页底部的电邮联系)
“接口”与“类”的区别是什么?~

1、接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、事件和索引的组合而已,并且也只能包含这四种成员;类除了这四种成员之外还可以有别的成员(如字段)。
2、不能实例化一个接口,接口只包括成员的签名;而类可以实例化(abstract类除外)。
3、接口没有构造函数,类有构造函数。
4、接口不能进行运算符的重载,类可以进行运算符重载。
5、接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰符(如:虚拟或者静态)。
6、派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不然。

UML类图:显示了一组类、接口、协作以及他们之间的关系

首先要明确,接口不是类,所以也不是抽象类。类是属性和方法容器,但是这些属性和方法没有任何区别的堆积在一起,当开发人员要寻找某个方法时,将很不方便,这个时候,接口出现了,接口的出现就是为了解决这个问题。接口将类的内部属性和方法进行分类,定义不同功能组的属性和方法。我们可以把接口看做一个特殊类,除了不能被实例化外,它能实现类能够完成的任何任务。我是学GIS二次开发的,接触的接口应该比一般人多,对接口的理解应该也更深刻,以上就是我的个人理解。

工作大半年后完善这个回答:

形象的来说,你自定义一个按钮,这个自定义按钮就是一个类。然后,你这个类里面有一些方法,比如说设置你这个自定义按钮的背景颜色,当你需要在外部调用这个方法时,你需要将这个方法暴露出来,那么这个方法就可以说是接口。再举一个例子,你肯定用过三方库,其实这些库就是有很多类(一大堆代码文件)组成,没有开源的库你是看不到它的实现细节的,比如说高德地图SDK,但是,你仍可以很好的使用它,前提是你对它的API比较了解后,这个API就是接口,说白了就是暴露出来的方法。
你可以这样简单的理解:一个代码文件就是一个类(大部分情况是这样,当然也可以一个文件多个类),类里面暴露出来的方法(可以外部直接调用的)就是接口。就这么简单一回事,当你入门之后你就会发现。😊(2016年12月26日 完善)

借口和抽象类某些方面很想,比如都可以被“继承”,但是有些不一样的地方。
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。 从语法定义层面看abstract class和interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。 使用abstract class的方式定义Demo抽象类的方式如下: abstract class Demo { abstract void method1(); abstract void method2(); … } 使用interface的方式定义Demo抽象类的方式如下: interface Demo { void method1(); void method2(); … } 在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。 从编程的角度来看,abstract class和interface都可以用来实现"design by contract"的思想。但是在具体的使用上面还是有一些区别的。 首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。 其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。 在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。 同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。 从设计理念层面看abstract class和interface 上面主要从语法定义和编程的角度论述了abstract class和interface的区别,这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。作者认为,从这个层面进行分析才能理解二者概念的本质所在。 前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的(参考文献〔3〕中有关于"is a"关系的大篇幅深入的论述,有兴趣的读者可以参考)。对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。为了使论述便于理解,下面将通过一个简单的实例进行说明。 考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,定义方式分别如下所示: 使用abstract class方式定义Door: abstract class Door { abstract void open(); abstract void close(); } 使用interface方式定义Door: interface Door { void open(); void close(); } 其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用abstract class和interface没有大的区别。 如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢(在本例中,主要是为了展示abstract class和interface反映在设计理念上的区别,其他方面无关的问题都做了简化或者忽略)?下面将罗列出可能的解决方案,并从设计理念层面对这些不同的方案进行分析。 解决方案一: 简单的在Door的定义中增加一个alarm方法,如下: abstract class Door { abstract void open(); abstract void close(); abstract void alarm(); } 或者 interface Door { void open(); void close(); void alarm(); } 那么具有报警功能的AlarmDoor的定义方式如下: class AlarmDoor extends Door { void open() { … } void close() { … } void alarm() { … } } 或者 class AlarmDoor implements Door { void open() { … } void close() { … } void alarm() { … } } 这种方法违反了面向对象设计中的一个核心原则ISP(Interface Segregation Priciple),在Door的定义中把Door概念本身固有的行为方法和另外一个概念"报警器"的行为方法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为"报警器"这个概念的改变(比如:修改alarm方法的参数)而改变,反之依然。 解决方案二: 既然open、close和alarm属于两个不同的概念,根据ISP原则应该把它们分别定义在代表这两个概念的抽象类中。定义方式有:这两个概念都使用abstract class方式定义;两个概念都使用interface方式定义;一个概念使用abstract class方式定义,另一个概念使用interface方式定义。 显然,由于Java语言不支持多重继承,所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的,但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。 如果两个概念都使用interface方式来定义,那么就反映出两个问题:1、我们可能没有理解清楚问题领域,AlarmDoor在概念本质上到底是Door还是报警器?2、如果我们对于问题领域的理解没有问题,比如:我们通过对于问题领域的分析发现AlarmDoor在概念本质上和Door是一致的,那么我们在实现时就没有能够正确的揭示我们的设计意图,因为在这两个概念的定义上(均使用interface方式定义)反映不出上述含义。 如果我们对于问题领域的理解是:AlarmDoor在概念本质上是Door,同时它有具有报警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢?前面已经说过,abstract class在Java语言中表示一种继承关系,而继承关系在本质上是"is a"关系。所以对于Door这个概念,我们应该使用abstarct class方式来定义。另外,AlarmDoor又具有报警功能,说明它又能够完成报警概念中定义的行为,所以报警概念可以通过interface方式定义。如下所示: abstract class Door { abstract void open(); abstract void close(); } interface Alarm { void alarm(); } class AlarmDoor extends Door implements Alarm { void open() { … } void close() { … } void alarm() { … } } 这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。其实abstract class表示的是"is a"关系,interface表示的是"like a"关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。

 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

接口是接口,类是类,一个叫做interface,一个叫做class,接口里面可以提供方法,但不提供这个方法具体怎么操作的。类可以去继承这个接口,在类中去写方法的具体实现。这一点跟抽象类有点类似,但是抽象类可以提供部分的实现,与接口各有优点,具体环境看着用的。接口和抽象类都不能被实例化。
详细的
你可以找本面向对象的书看看,都有介绍,多练习,就能体会了。

接口是接口,类是类,一个叫做interface,一个叫做class,接口里面可以提供方法,但不提供这个方法具体怎么操作的,这些所以接口要被类去实现。类可以去继承这个接口,在类中去写方法的具体实现。


康德口中的智思体同人类的自由到底是什么关系?
由于我的〈康德著作全集〉才看了一半,因此对这个概念的理解准不准确也不好说。我是学法律的,因此我觉得智思体就好比是法律研究中所说的自然法 也就是通过理性来为我们先天设置的一个完美的样本 就好比说 智思体或者自然法规定二加二等于四 而我们由于认识能力有限 总是算得二加二等于三 因此我们是...

原口动物和后口动物的区别是什么?
一、性质不同 1、原口动物性质:由原肠胚的胚孔形成口的动物。2、后口动物性质:在胚胎的原肠胚期其原口形成为肛门而与之相对的后口形成嘴部的动物总称。二、类型不同 1、原口动物类型:扁形动物、纽形动物、线形动物,环节动物、软体动物和节肢动物等。2、后口动物类型:半索动物门、毛颚动物...

脊椎动物可分为五大类,每一类的主要特征?
脊椎动物分为六类,各类的主要特征如下:1、圆口类:这类动物没有上下颌,又叫无颌类。身体分头、躯干、尾等3部分。头、躯干圆形,尾部侧扁。它的神经系统、骨骼、循环系统、消化系统都较原始,对环境适应能力较差,有一些种类靠寄生在鱼类体内生活。2、鱼类:适于在水中游泳,整个身体呈纺锤形而稍扁...

昆虫的口器结构与害虫的防治关系
昆虫口器类型不同,其危害特征不同,防治方法也不同。1、拥有刺吸式口器的害虫危害特点是刺吸植物的汁液,被害部位出现各种褐色斑点。防治上应使用内吸剂、熏蒸剂或触杀剂。2、拥有咀嚼式口器的害虫危害特点是直接取食植物的叶、花、果实、茎杆,造成植物组织残缺不全或受害部位破损。防治上应使用胃毒剂...

生物初二上册知识点
1、腔肠动物身体结构简单,大多生活在海水中,少数种类生活在淡水中,如水螅。水螅体形辐射对称,便于感知刺激和捕食。2、水螅身体由外胚层和内胚层两层细胞构成,消化腔与口相通,外胚层含有刺细胞。3、腔肠动物的主要特征是辐射对称、体表有刺细胞、有口无肛门。4、腔肠动物与人类生活关系密切,如...

昆虫4种口器的基本特征和代表昆虫
吸食动物血液的刺吸式口器可以蚊(双翅目)类的口器为代表。蚊类是最重要的卫生昆虫之一,与人畜有很密切的关系。只有雌蚊才吸血,因此以雌蚊的口器叙述如下。蚊类的口器很细长,组成口器的所有基本部分都加进了取食机构。下唇延长成喙,除下颚须外,由上唇、上颚、舌及下颚内颚叶特化成六根口针全部藏在喙前面的唇...

什么是黑道切口?
下手歹者常直取对方双目,意欲废掉对手的招子。另眼睛亦可称「湖」。顺风子:指耳朵。海子/江子/樱桃子(女):口。金杠子:腿。南子:肚子。踢杞:脚。蚕子/定盘子:心。五、武器类 蛇儿:把兵器比做叫化子手上的蛇。暗青子:即暗器。青子:兵刃。片子:刀。海青子:大刀。月牙锋:戟。

无线路由器上的WAN是什么口
用户应选择PPPoE拨号;如果宽带运营商没有提供账号和密码,而是直接提供网络接入,用户则应选择动态IP;而如果宽带运营商提供了固定的IP地址、子网掩码、网关和DNS信息,用户则需选择固定IP。总之,无线路由器上的WAN口是连接外部网络的重要接口,其连接类型的选择直接关系到用户能否成功接入互联网。

人类所有知识如何分类?
按现代认知心理学的理解,知识有广义与狭义之分,广义的知识可以分为两类,即陈述性知识、程序性知识。1、陈述性知识:陈述性知识是描述客观事物的特点及关系的知识,也称为描述性知识。陈述性知识主要包括三种不同水平:符号表征、概念、命题。符号表征是最简单的陈述性知识。所谓符号表征就指代表一定事物...

人口生物学现状
人口生物学作为一门交叉学科,融合了生物学、人口学和统计学等多个领域的知识,旨在深入探讨人类生命过程与人口现象之间的复杂关系。通过研究人类生命的基础生物过程,人口生物学有助于理解人口增长、分布、变化的生物与环境因素,以及这些因素如何影响人类社会的发展。同时,它也为解决人口健康、资源分配、社会...

昌乐县13522879089: 接口与类的关系 -
冷阁善唯: 首先要明确,接口不是类,所以也不是抽象类.类是属性和方法容器,但是这些属性和方法没有任何区别的堆积在一起,当开发人员要寻找某个方法时,将很不方便,这个时候,接口出现了,接口的出现就是为了解决这个问题.接口将类的内部...

昌乐县13522879089: java中的类和接口是什么关系? -
冷阁善唯: 接口是一组方法的集中定义,但是在接口中只定义方法本身,不定义的方法的实现过程.类是生成实例对象的模板.它和接口的关系是,类是接口实现的载体,即引入接口的类负责接口方法的实现.Java支持单重继承,可以减小编程中的复杂度;但是,可以实现多重接口.类A由类B继承而来,则A是B的子类,B是A的父类.

昌乐县13522879089: Java的类与接口有啥关系 -
冷阁善唯: 打个比方吧 武器这是一个很抽象的概念.他是所有武器共同点的集合体. 坦克可以继承自武器类,同样手枪也可以.他们都就具有武器的性质——进攻. 因为武器很宽泛,而我们希望坦克能够移动手枪当然不能移动.而移动这个概念他其实是...

昌乐县13522879089: java中接口和类之间是什么关系? -
冷阁善唯: 接口相当于c++里边的abstract class,但是只能够定义方法的参数,以及常量.all known是指已知的.类是用来实际接口的,因为接口中只定义了方法的参数,而没有实现该方法.比如讲有一个接口定义为:Interface ISample { }之类的,那么类就是Class CSample Implement ISample{ }之类的.Implement就是实现的意思.

昌乐县13522879089: java中 接口可以怎么通俗的理解? 接口 与 实现接口类 的关系? -
冷阁善唯: java是只支持单继承的,这样有很多不便.为了解决这个问题,采用接口的方法,java支持多实现,就是一个类可以实现多个接口,在实现接口的同时还可以继承一个类,你实现了这个接口也类似于继承了这个接口.接口中的方法都是抽象的,没有方法体的,其作用就是让子类实现的,方法默认有public abstract 接口中的属性默认加修饰符,public static final ,所以可以通过类名调用,也可以通过对象调用.另外接口也是为多态提供方便.

昌乐县13522879089: java 接口与实现类是怎么关联起来的? -
冷阁善唯: 接口和实现类通过implements关键字关联起来. 举例: 1、接口定义 1 2 3publicinterfaceIA{//定义一个接口IApublicvoidshow();//定义接口中的方法定义show } 2、实现类 1 2 3 4 5publicclassA implementsIA{//定义类A,通过implements实现接口IApublicvoidshow(){//实现show方法System.out.println("IA");} } 补充:implements是一个类实现一个接口用的关键字,它是用来实现接口中定义的抽象方法.

昌乐县13522879089: C#中的接口和类有什么异同? -
冷阁善唯: 接口和类是继承关系 即 类继承于一个或多个接口 所谓的接口 你可以这样理解 就是类的一个蓝图 一个框架 一种规则 继承于他的类 都要符合他的要求和规范 实现接口中的方法 楼上朋友说的 接口和抽象类的区别 也是很重要的 你两者对比理解即可 在看看代码 自己试试就能明白个一二了

昌乐县13522879089: 类和接口的区别 -
冷阁善唯: 接口是一种完全抽象的类,定义有方法,却不用实现,所以不能new 出来.通常的用处就是接口中包含几个类中相同的方法,而这几个类的具体实现又不一样,那么我们就可以使用接口来包含这些类的公用方法或变量(常量)……

昌乐县13522879089: java 接口和类 -
冷阁善唯: 类是一个比较具体的概念,就比如说,鹦鹉,他的本质是鸟类.鸟类就是一个类的概念.能够飞行就是一个接口的概念.因为飞行功能不能单独存在,必须依托一个实实在在地类去实现它,比如飞机也能飞,ufo也能飞,鸟也能飞,但是他们飞的方式都不同,所以飞也能抽象归纳成一个接口的形式.class 鹦鹉 extend 鸟 implements 飞 还够形象吧?

昌乐县13522879089: Java中抽象类与接口的关系 -
冷阁善唯: 在Java语言中,接口(Interface)是对符合接口需求的类的一套规范.接口与包相似,也是用来组织应用中的各类并调节它们的相互关系的一种结构,更准确地说,接口是用来实现类间多重继承功能的结构 1 接口概念 接口主要作用是可以帮助实...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网