定义接口和抽象类

抽象类是abstract修饰符用于表示所修饰的类是不完整的,并且它只能作用基类.抽象类与非抽象类在以下方面是不同的

1抽象类不能直接实例化,并且对抽象类使用new运算符是编译时错误.虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为null,或者含有对非抽象类的实例引用(此非抽象类是从抽象类派生的)

2. 允许(但不要求)抽象类包含抽象成员

3.抽象类不能被密封

当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有成员,从而重写那些抽象成员.eg.

abstract class A

{

public abstract void F();

}

abstract class B:A

{

public void G(){}

}

class C:B

{

 public override void F()

{

  //actual implenmentation of F

}

}

抽象类A引入抽象方法F,类B引入另一个方法G,但由于它不提供F的实现,B也必须声明为抽象类.类C重写F,并提供一个具体实现.由于C中没有抽象成员,因此可以(但并非必须)将C声明为非抽象类.

在.NET Framework中,接口可以拥有静态成员,嵌套类型,抽象,虚拟成员,属性和事件.实现接口的任何类型必须提供接口中所声明的抽象成员的定义.

接口和抽象类的区别如下:

1.接口中不能有非抽象方法,但抽象类中可以有

2.一类能实现多个接口,但只能有一个父类

3.接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口

4.抽象类是一个不完整的类,需要进一步细化;而接口只是一个行为的规范

5.接口基本不具备继承的任何基本铁点,它只是承诺了能调用的方法

6.接口可以用于支持回调(callback),但是继承不行.用于回调的接口只是提供指向方法的指针,而且是一个类型安全的指针方式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值