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

2024-11-30 12:42:11
推荐回答(1个)
回答(1):

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