2024年9月c接口和抽象类的区别(在C#中,接口与抽象基类的区别在于( ))

 更新时间:2024-09-21 10:03:22

  ⑴c接口和抽象类的区别(在C#中,接口与抽象基类的区别在于()

  ⑵在C#中,接口与抽象基类的区别在于()

  ⑶选A以下是我在网上看到的几个形象比喻:.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F属于飞机抽象类,鸽子属于鸟抽象类。.就像铁门木门都是门(抽象类,你想要个门我给不了(不能实例化,但我可以给你个具体的铁门或木门(多态;而且只能是门,你不能说它是窗(单继承;一个门可以有锁(接口也可以有门铃(多实现。门(抽象类定义了你是什么,接口(锁规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染。一、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。二、接口:接口是引用类型的,类似于类,和抽象类的相似之处有三点:、不能实例化;、包含未实现的方法声明;、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员;另外,接口有如下特性:接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类。三、抽象类和接口的区别:.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中..接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;.一个类一次可以实现若干个接口,但是只能扩展一个父类.接口可以用于支持回调,而继承并不具备这个特点..抽象类不能被密封。.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的..(接口与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解。同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如asp.中,Page类,有ServerRequest等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.四、抽象类和接口的使用:.如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。

  ⑷A.?两者都是抽象类,都不能实例化。

  ⑸B.?interface实现类及abstrct?class的子类都必须要实现已经声明的抽象方法。

  ⑹A.?interface需要实现,要用implements,而abstract?class需要继承,要用extends。

  ⑺B.?一个类可以实现多个interface,但一个类只能继承一个abstract?class。

  ⑻C.?interface强调特定功能的实现,而abstract?class强调所属关系。

  ⑼D.?尽管interface实现类及abstrct?class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的?(declaration,?没有方法体),实现类必须要实现。而abstract?class的子类可以有选择地实现。

  ⑽这个选择有两点含义:

  ⑾一是Abastract?class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct?class中必须定义方法体。

  ⑿二是abstract?class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

  ⒀E.?abstract?class是interface与Class的中介。

  ⒁interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也?不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接?口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract?class或Class中。

  ⒂abstract?class在interface及Class中起到了承上启下的作用。一方面,abstract?class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己?的实例变量,以供子类通过继承来使用。

  ⒃?interface的应用场合

  ⒄A.?类与类之前需要特定的接口进行协调,而不在乎其如何实现。

  ⒅B.?作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

  ⒆C.?需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

  ⒇D.?需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

  ⒈?abstract?class的应用场合

  ⒉一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:

  ⒊A.?定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract?class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。

  ⒋B.?某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。

  ⒌C.?规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能。

  ⒍首先接口是一种高度抽象的“模版“,,而接口中的属性也就是’模版’的成员,就应当是所有实现“模版“的实现类的共有特性,所以它是public?static的?,是所有实现类共有的?.假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?

  ⒎其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别??又接口是一种更高层面的抽象,

  ⒏是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的

  ⒐关于抽象类和接口的区别说法不正确的是

  ⒑抽象类的设计理念介于普通的类与接口之间,抽象类的目标是为了设计一个通用的、允许有多个实现的类型。包含抽象方法的类叫做抽象类;抽象类无法实例化,如果一个类继承了某个抽象类,并且想实例化,就需要实现抽象类中的所有抽象方法。

  ⒒抽象类在Java中的应用,最经典的是“骨架模式”——和接口配合使用,让设计同时具备抽象类和接口的优点——抽象类的演变比接口的演变要容易,同时允许系统中的其他类不使用这个骨架实现类。

  ⒓在“骨架模式”中,接口的作用仍然是定义类型,骨架实现类就是一个抽象类,负责所有与接口实现相关的工作。集合框架中大量应用了“骨架模式”,例如:AbstractCollection、AbstractList、AbstractMap和AbstractSet,将一些通用的操作都放在骨架实现类中实现,这样具体的ArrayList和LinkedList就可以专注于自己的特性的实现,避免写重复代码。

  ⒔“骨架模式”听起来有点像设计模式中的模板方法,不过二者之间还是有不一样的:“骨架模式”的目标是从代码层面避免重复代码,“模板方法”的目标是在设计层面对某一类事情的抽象和扩展点的设计。

  ⒕在Java中接口的语义是“islike”——任何实现了某个接口的类,看起来就像具备了这个接口的能力。在Java中,接口可以用来做三个事情:类型定义;作为常量接口,保存一些常量;仅作为标签使用,不过在《EffectiveJava》的第条指出,接口应该只用于定义类型。

  ⒖在Java之前,接口中只能出现方法的声明,不能出现方法的实现。Java对接口的能力做了增强:接口中可以有defaultmethod;接口中可以有staticmethod;提供了FunctionInterface这个概念。

  ⒗C语言中的接口是什么它和抽象类有什么区别

  ⒘在C语言中,或者说所有的编程语言中,接口就是ApplicationProgrammingInterface(API)的中文说法,即一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。在C语言中,接口就是函数。、实现一组函数供别人使用,就是提供接口;使用别人提供的函数,就是调用接口。C语言的库函数,比如printf,scanf等,都是接口的一种。

  ⒙C语言中的接口是什么它和抽象类有什么区别

  ⒚把stdio.h库比喻成一个黑箱子,printf就是它的其中一个接口。通过接口你可以使用箱子里的某个功能(在这里是输出字符)而不用去关心printf的实现,死钻stdio.h里的乱七八糟的原理。类(不是说抽象类)是C++的东西,比如车类,由自身属性(颜色,重量什么的)和行为(前进,左转等)所构成,有点拟人的感觉。你只能让车做行为而改变自己属性(前进撞墙了等)而不能直接改变它的属性(自动改变颜色?)还有其他什么继承就不罗嗦了。抽象类是类的其中一种特殊的类。

  ⒛什么是接口接口有哪些好处,抽象类(abstract和接口(interface)的区别

  什么是接口?接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为接口是这样定义的:接口,里面包含方法,但是没有方法的具体实现。然后在继承该接口的类中去实现接口中的所有方法。包括属性、方法、事件、索引器,但是不能包括字段;;;;接口中只能包含属性、方法、事件、索引器;接口可以实现C#中的多继承。(c#不可以多继承,用接口可以实现接口可以继承接口,可以继承多个接口;类可以继承接口,但是继承的类必须去实现接口中的方法代码。等。。接口不能直接被实例化接口一般不用什么修饰符,因为接口默认的修饰符是public公共的。接口中的所有成员默认为public,因此接口中不能有private修饰符接口的好处:对类的一种约束。如果一个项目的需求可能在不断变化的情况下,用接口可以很容易进行拓展,并不影响以前写的功能模块的代码,只要新添加类,继承这个接口就可以了。如果每个类都要用到一些公用的属性字段或者方法,则通过继承接口可以方便的实现,不用再每个类中都写一次公用的属性或方法。接口中不能包含【常量、字段(域)、构造函数、析构函数、静态成员】抽象类(abstract和接口(interface)的区别:abstract类和接口类似,抽象类中定义方法,只有方法名,但不包含主体,不包含实现,和接口一样,可以把抽象方法当作没有具体实现的虚方法。抽象类不能被实例化。这个接口一样,抽象类中并非一定有抽象方法,但是有抽象方法的类,一定是抽象类。派生类必须覆盖基类的抽象方法,(也就是子类去实现继承类中的方法抽象类中可以包含:属性、普通方法、可以包含虚方法、抽象方法;usingSystem;publicabstractclassA//抽象类A{privateintnum=;publicintNum//抽象类包含属性{get{returnnum;}set{num=value;}}publicvirtualintgetNum()//抽象类包含虚方法{returnnum;}publicvoidsetNum(intn)////抽象类包含普通方法{this.num=n;}publicabstractvoidE();//类A中的抽象方法E}publicabstractclassB:A//抽象类B继承了抽象类A,所以抽象类B也就继承了抽象方法E(),类B也是抽象类。{}publilassC:B//在类C中重写类B继承类A的抽象方法E(),如果类B中有自己的抽象方法,在类C中也必须去重写{//override覆盖、重写、覆写publicoverridevoidE(){}}publilassTest{staticvoidMain(){=newC();//实例化C,C也就有了E(这个方法了。c.E();}}抽象类和接口相同点:()都可以被继承()都不能被实例化()都可以包含方法声明()派生类必须实现未实现的方法区别:()抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。()抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做。。。”()接口可以被多重实现,抽象类只能被单一继承()抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中()抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性()接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法()接口可以用于支持回调,而继承并不具备这个特点()抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的

  接口中不能有任何的实现,但接口中可以定义成员,但只能定义以下成员:属性,方法,事件以及索引器。而抽象方法的定义是是,只要对象中含有抽象方法的类,都是属于抽象类的。也就是说一个普通的类中有一个没有实现的方法(抽象方法那么该类必须加关键词,说明其是一个抽象类。从这里可以看出抽象类与普通类的区别就是至少有一个方法没有实现,或者称至少含有一个抽象方法。所以在抽象类中是可以实现方法体的。那么对于字段与常数等都是不做要求的,而这些却不能在接口不定义。接口不不能实现任何方法的。在翻译资料中,很多时间我们都丢失了另一个名字:纯抽象类,因为很多人对超类这个术语而感兴趣,所以往往以为纯抽象类指的就是超类,其实不是一样的,超类在java中指的就是抽象,它只用来被继承,不可能进行实例化,说白了它说是一个抽象类,而纯抽象类则指没有任何方法实现的类,也有人认为纯抽象类是一个范畴,接口就是属于纯抽象类,而抽象类若是没有任何方法体的实现时,也是属于纯抽象类。但不管怎么说,其实在翻译时由于它对我们编程时起不到多大的理解做用,而被翻译去掉了,我们的术语中没有人说纯抽象类,但事实上在其他的术语中还是存在的。当然,定义接口的成员,包括任何成员,都是不可实现的,而字段一般是一个引用值,或是值类型,所以在接口中是不可能实现的。虽然属性可以,但属性同样不能有实现的。定义与实现其实是两码事的,所以在接口中是可以定义成员的。这是接口类是否可以定义成员的解释。回过头来看问题:我觉得大家虽然都找到B答案是错的,但是该选择支的理解是错误的。该支的意义是,抽象类自身可以定义成员,它的意思显然是不是可以给抽象类定义很多成员,而是它是否可以做为其他类或是自身类的成员,换句话或说,这个抽类象是否可以是其实类的成员类型,结果当然是可以的。比如抽象类可以做为某一个类的反回类型,也可以做为一个字段的类型,当然也可以做为属性的类型的。所以这句话多了自身两个字,理解不应该是类可以定义成员那么简单了。而事实上接口与抽象类都可以做为返回类型或字段类型的。如果没有单独的语境,其实在C++中是可以实现多重继承的,我们的多重继承指的是一个类拥有多于一个的父类。也可以说可以继承于两个类的,而在单继承语言中是不可以的。C#是一个单继承语言,所以A的选支必须在有语境的时间才是对的。不过这里的题也比较乱,这个是由于面向对象术语的不统一造成的。在java中,一个说基类,派生类,而在C#中一般说父类,子类。java中的超类实际就是C#中的抽象类。术语的语系环境还是不一样的。要是非要C#中说基类派生类也是未尝不可,因为C#与java的交流有很多的。术语混合着来也是一样的,但如果是正规的文献中,出现这种,怕是有点别扭了——因为在C#中的基类被另有所指,一般指的基类是最基础的类型——比如int等等。当然它虽然指的是最基础的类型,但它不愿意指的是原始类,如果说最最基础的怕是在C#中只有一种类型——object,如果非要再详细点,那么只可能有valuetype值类型,如果是这样,基类的存在是没有意义的——这也是为什么在C#术语中基类没有被方泛使用的原因。换句话来说,基类在C#中,一种是为了沿用java,一种是指的最基础的类型都是不正规的称呼。所以在于D支上,是有些不正规的。一个类可以有多个基类的原因是因为类的线性继承,比如B类继承于A,C为继承于B,而A,B都可以做为C的基类(它不是Java中的基类,否则一个派生类只可能有一个基类,而接口可以通过多重继承,一个类可以继承很多个接口——一些无聊人的研究说可以继承个接口,这可能与参数列表相关,但它不影响我们正常的编程,我也没那么无聊。但是接口最好不要继承接口,只能让类隐式线性继承,如果重复继承会引起不必要的麻烦的。比如:A类继承于IA接口,B类继承于A类,其实B类必须实现IA接口,这是一种隐式继承,如果你非写成B:A,IA,就是一种重复继承了,没有实际没有多大的意义了。

  关于接口的描述哪个正确

  A.是正确的这是接口定义B.是错的,一个类可以多实现但是不能多继承,接口多实现就好比电脑上的USB就是个一个接口插座你既可以插入鼠标也可以插入键盘,还可以插入移动硬盘C.接口之间可以有继承关系但是接口之间的继承是没有必要的等于废话,语法上并没有错误D:接口和抽象类是有区别的。比较点抽象类接口组成抽象方法、普通方法、常量、变量、构造方法、全局常量抽象方法、全局常量定义AbstractInterface子类子类通过extends关键字来继承抽象方法子类通过implements来实现接口限制一个子类只能继承一个抽象类一个子类可以实现多个接口关系一个抽象类可以实现多个接口一个接口不能继承一个抽象类只能实现多个接口一个抽象类中可以由多个接口一个接口中也可以由多个抽象类设计模式模板模式工厂模式、代理模式两个结合起来可以实现适配器模式实例化都是通过对象多态性,通过子类进行对象的实例化操作实现限制存在单继承限制不存在此限制特性-可以作为标准、一种能力

  类是一个支持集成的抽象数据类型,那么对象是类的什么呢

  类是一个支持集成的抽象数据类型,那么对象是类的实例。

  类和对象(class是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。

  它们的关系是,对象是类的实例,类是对象的模板。

  先声明类类型,然后再定义对象,举例:

  Studentstud,stud;//Student是已经声明的类类型

  在声明类类型的同时定义对象

  class?Student//声明类类型

  {????先声明公用部分

  void?display()

  cout《《″num:″《《num《《endl;

  cout《《″name:″《《name《《endl;

  cout《《″sex:″《《sex《《endl;

  char?name;

  stud,stud;

  不出现类名,直接定义对象

  class//无类名

  声明以下部分为私有的

  声明以下部分为公用的

  stud,stud;//定义了两个无类名的类对象

  接口与抽象类相比各自的优缺点

  一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口interfaceIInterface{voidMethod();}abstractclassMyAbs:IInterface{publicvoidMethod(){Console.WriteLine(“MethodimplementedfromtheIInterface“);}}classMyClass:MyAbs//mustimplementbaseclassabstractmethod{}classMyClient{publicstaticvoidMain(){MyClassmc=newMyClass();mc.Method();}}一个抽象类必须为所有的接口成员提供实现一个用于实现接口的抽象类可能把接口方法安排到抽象方法上。例如interfaceI{voidM();}abstractclassC:I{publicabstractvoidM();}

您可能感兴趣的文章:

相关文章