c#中抽象类和接口的区别

转自:http://www.51testing.com/?248559/viewspace-133065.html

一、概念

  抽象类:顾名思义,抽象类首先是对进行抽象的。而类是对对象进行抽象的 。当设计一个新的抽象类时,一定是用来继承的,定义一个抽象类,但不用来继承就失去了它的意义了。具体类不是用来继承的,只有抽象类是用来继承的。比如:猫,狗,牛,羊,是具体的类,此时可以把这些类的一些共性抽象出一个动物类,这个动物类就是抽象类。猫,狗,牛,羊继承动物类。

  接口:接口是对行为的抽象,对类的局部(行为)进行的抽象,而抽象类是对类的整体(字段、属性、方法)的抽象。如果只关注行为抽象,那么也可以认为接口就是抽象类。不论是接口、抽象类、类,都是在不同层次、不同角度进行抽象的结果。他们的共性是抽象。

二、语法区别

抽象类:一定要在前面加abstract

 abstract class Animal  //加abstract关键字,表明是抽象类。

{

protected abstract string getShoutSound();

//在方法返回前加abstract表明此方法是抽象方法,它没有方法体直接在括号后加;

}

注意几点:第一,抽象类不能实例化,“动物“实例化是没有意义的;第二,抽象方法必须被子类重写。第三,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;第四,抽象类中可包含非抽象的方法(有具体实现的代码);第五,继承类可以部分实现抽象类中的抽象方法。第六,一个类只能继承一个抽象类。

接口:定义接口加interface

interface Ichange//接口名称前加I表示它是个接口

{

string ChangeThing(string thing);//方法前面不能有任何修饰符

}

注意几点:第一,接口不能实例化,不能有构造方法和字段,不能有修饰符,比如public、private等;第二,不能声明虚拟的或静态的方法;第三,实现接口的类就必须实现接口中的所有方法和属性。第四,一个类可以继承多个接口,多个类继承相同的接口。

三、设计的思维角度

从设计的角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类。这也体现了敏捷开发的思想,通过重构改善既有代码的设计。事实上,只有猫或狗这个类时,你就去设计一个动物类,很可能就过度设计了。所以说,抽象类往往是通过重构得来的,当然了,如果你事先意识到多种分类的可能,那么事先就设计出抽象类也完全是可以的。而接口是根本不知道子类的存在的,方法如何实现还不确认,预先定义了。可以这么说,抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的。实现接口和继承抽象类并不冲突,比如,我们完全可以让超人继承人类,再实现飞行接口(我们平常人是不会飞的)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值