abstract class和interface的不同有很多方面,那么这里向你讲述的是语法定义和编程的角度二者的不同,希望对你了解abstract class和interface有所帮助。

咱们知道abstract classinterface在Java言语中都是用来进行笼统类(本文中的笼统类并非从abstract class翻译而来,它表明的是一个笼统体,而abstract class为Java言语中用于界说笼统类的一种办法,请读者留意差异)界说的,那么什么是笼统类,运用笼统类能为咱们带来什么优点呢?

浅析abstract class和interface的不同(abstract class与interface的区别)  interface abstract class 第1张

在面向目标的概念中,咱们知道一切的目标都是经过类来描绘的,可是反过来却不是这样。并不是一切的类都是用来描绘目标的,假如一个类中没有包括满足的信息来描绘一个详细的目标,这样的类便是笼统类。笼统类往往用来表征咱们在对问题范畴进行剖析、规划中得出的笼统概念,是对一系列看上去不同,可是本质上相同的详细概念的笼统。比方:假如咱们进行一个图形修正软件的开发,就会发现问题范畴存在着圆、三角形这样一些详细概念,它们是不同的,可是它们又都归于形状这样一个概念,形状这个概念在问题范畴是不存在的,它便是一个笼统概念。正是由于笼统的概念在问题范畴没有对应的详细概念,所以用以表征笼统概念的笼统类是不能够实例化的。

在面向目标范畴,笼统类首要用来进行类型躲藏。咱们能够构造出一个固定的一组行为的笼统描绘,可是这组行为却能够有恣意个或许的详细完成办法。这个笼统描绘便是笼统类,而这一组恣意个或许的详细完成则表现为一切或许的派生类。模块能够操作一个笼统体。由于模块依赖于一个固定的笼统体,因而它能够是不允许修正的;一起,经过从这个笼统体派生,也可扩展此模块的行为功用。了解OCP的读者必定知道,为了能够完成面向目标规划的一个最中心的准则OCP(Open-Closed Principle),笼统类是其间的关键所在。

从语法界说层面看abstract class和interface

在语法层面,Java言语关于abstract class和interface给出了不同的界说办法,下面以界说一个名为Demo的笼统类为例来阐明这种不同。 运用abstract class的办法界说Demo笼统类的办法如下:

  1. abstractclassDemo{
  2. abstractvoidmethod1();
  3. abstractvoidmethod2()
  4. }

运用interface的办法界说Demo笼统类的办法如下:

  1. interfaceDemo{
  2. voidmethod1();
  3. voidmethod2();
  4. }

在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有所协助。

【修正引荐】

  1. C# interface编程运用浅析
  2. C#interface界说及运用浅析
  3. C#显式完成接口原理浅析
  4. C# interface学习经历浅谈
  5. C# interface运用实例剖析
转载请说明出处
知优网 » 浅析abstract class和interface的不同(abstract class与interface的区别)

发表评论

您需要后才能发表评论