接口 Interface
- 接口不能被实例化
- 接口只能包含方法声明
- 接口中的成员包括方法、属性、索引器、事件
- 接口中不能包含常量、字段、构造函数、析构函数、静态成员
- 接口中的所有成员默认 public,因此接口中不能有private修饰符
- 派生类必须实现接口的所有成员
- 一个类可以继承多个接口,接口之间用 逗号 隔开
- 一个接口可以有多个父接口,实现该接口的类 必须 实现所有 父接口中的所有成员
抽象类 Abstract
1、抽象方法只作声明,而不包含实现,可以看成是没有实现的虚方法
2、抽象类可以但不是必须有抽象属性、抽象方法,但是一旦有了抽象方法,就一定要把这个类 声明成 抽象类
3、抽象类不能实例化
4、具体派生类 必须 覆盖基类的抽象方法
5、抽象派送类可以覆盖基类的抽象方法,也可以不覆盖,则其具体实现派生类不行覆盖它们。
public abstract class A {
//属性
public string Name{get;set;}
//虚方法
public virtual string getName()
{
return Name;
}
//普通方法
public void setName(string name)
{
this.Name=name;
}
//抽象方法
public abstract void E();
}
Public abstract class B:A
{
}
public class C:B
{
//重写从类A继承的抽象方法。如果类B,自己也定义了抽象方法,则也必须重写。
// 派生类,必须实现【重写 override】的继承来的所有抽象方法。
public override void E()
{
//code
}
}
public class Test
{
static void Main()
{
C c=new C();
c.E();
}
}
在抽象类中,新增一个方法【是方法,不是抽象方法】,继承类中可以不用任何处理,而对于接口中,新增一个方法【没有方法体】,则需要修改 继承类提供这个方法的方法体。
接口更多的是在系统设计方法发挥作用,主要用于定义模块之间的通信契约
抽象类在代码实现方面发挥作用,可以实现代码的重用
继承类对于两者【接口和抽象类】所涉及的方法实现是不同的,
继承者对于抽象类所定义的抽象方法,可以不用重写【override】,可以延用抽象类的方法【只是此时 也是 抽象类】,
对于接口所定义的方法、属性【属性只声明 { },里面没有get,set】,在继承类中必须给出相应的方法和属性【{set ; get;}】。
Abstract Interface 区别
相同点
1、都可以被继承,接口多继承,抽象类单继承
2、都不能被实例化
3、都可以包含方法声明
4、派生类必须实现未实现的方法
不同点
1、抽象类在定义类型方法【普通方法给出方法体,抽象方法 只是声明】的时候,可以给出方法的实现部分,也可以不给出,而对于接口来说,所定义的方法都不能给出实现
2、abstract基类可以定义字段、属性、方法实现[抽象方法除外]
interface只能定义属性、索引、事件和方法声明,不能包含字段
3、抽象类是一个不完整的类,需要进一步细化
接口是一个行为规范
微软自定义接口总是后面带 able 字样,证明其是表述 【我能做。。。】
4、接口可以被多重实现,抽象类只能被单一继承
5、抽象类更多是定义在一系列紧密相关的类间,
接口大多数是关系疏松,
但都实现某一功能的类中。
6、接口基本上不具备继承的任何具体特点,它仅仅承若了能够调用的方法
7、接口可以支持回调,而抽象类并不具备这种特点
8、abstract是从一系列相关对象中抽象处理的概念,因此反映的是事物内部共性
接口是为了满足外部调用而定义的一个功能约定,因此反映是事物外部的特点
9、抽象类实现具体方法默认虚的【virtual】,但实现接口的类中的接口方法却默认非虚的,当然也可以声明虚【virtual】的
10、抽象类不能被实例化(但是抽象类中可以有构造函数),只能通过派生类进行实例化文章来源:https://www.toymoban.com/news/detail-448502.html
抽象方法与虚方法的区别:
抽象方法必须定义在一个抽象类中,虚方法没有特殊要求
抽象方法在基类中不可以有具体的实现,而虚方法在基类中必须有具体的实现
抽象方法要求必须在派生类中对其进行重写;而虚方法可以在派生类中对其进行重写,也可以不对其进行重写
抽象类与接口的相同点:
都可以被继承
都不可以实例化
都可以包含方法声明
派生类都必须实现其未实现的方法
抽象类与接口的区别:
抽象类可以定义字段、属性,可以包含方法的实现,可定义的内容与非抽象类基本一致;而接口只能定义属性、索引器、事件和方法声明,不能包含字段和方法实现
抽象类是一个不完整的类,需要进一步细化扩展;而接口是一个行为规范
抽象类更多的是定义在一系列紧密相关的类之间;而接口大多数是关系疏松但都实现某一功能的类中
抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法
可以用于支持回调,而继承并不具备这个特征
抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法文章来源地址https://www.toymoban.com/news/detail-448502.html
到了这里,关于.NET Interface [接口]、abstract【抽象类】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!