C#抽象类和接口
2016-03-21 15:23
363 查看
抽象类和接口有什么区别?有了抽象类为什么还要接口?
接口和抽象类的相同点是都不能实例化,不同点是接口中的方法都没有方法体,而抽象类则不然,除了抽象方法没有方法体外,其他方法都有方法体。
原因是:在C#中,类只能继承一个类,但可继承多个接口。
抽象类:
1、不能实例化
2、抽象方法必须被子类重写
3、如果类中包含有抽象方法,该类必须定义为抽象类
抽象类前加abstract。
抽象方法在返回值前加abstract,没有方法体,直接在括号后加分号。
1、包含有抽象方法的类一定为抽象类
2、抽象类不一定包含抽象方法
虚方法是用来实现多态的,为了使子类的实例完全接替来自父类的成员,父类必须将该成员声明为虚拟的,这是通过在该成员的访问类型前加virtual关键字来实现的。
子类可以选择使用override关键字将父类实现替换为它自己的实现,这就是方法重写,当然也可以不重写。
接口和抽象类的相同点是都不能实例化,不同点是接口中的方法都没有方法体,而抽象类则不然,除了抽象方法没有方法体外,其他方法都有方法体。
原因是:在C#中,类只能继承一个类,但可继承多个接口。
抽象类:
1、不能实例化
2、抽象方法必须被子类重写
3、如果类中包含有抽象方法,该类必须定义为抽象类
抽象类前加abstract。
抽象方法在返回值前加abstract,没有方法体,直接在括号后加分号。
1、包含有抽象方法的类一定为抽象类
2、抽象类不一定包含抽象方法
虚方法是用来实现多态的,为了使子类的实例完全接替来自父类的成员,父类必须将该成员声明为虚拟的,这是通过在该成员的访问类型前加virtual关键字来实现的。
子类可以选择使用override关键字将父类实现替换为它自己的实现,这就是方法重写,当然也可以不重写。
class Animal { public virtual void Shout() { Console.WriteLine("动物叫!"); } } class Cat:Animal { public override void Shout() { Console.WriteLine("猫叫!"); } } class Dog: Animal { public override void Shout() { Console.WriteLine("狗叫!"); } } class Program { static void Main(string[] args) { Animal[] animals=new Animal[2]; animals[0]=new Cat(); animals[1]=new Dog(); foreach (var animal in animals) { animal.Shout(); } Console.ReadLine(); } }
相关文章推荐
- 委托和事件C#演示代码
- 《CLR Via C#》使用CSC.exe进行单文件的编译
- vs2015 打不开了 提示"CSharpPackage",未能正确加载xx包
- .net 过滤特殊字符
- BC#76 C_HDU5647 DZY Loves Connecting 树形DP
- C# 开源项目一
- c#正则表达式
- c#代码分析
- C#读取web.config配置文件内容
- c#中两种不同的存储过程调用与比较
- 使用VS2013进行C#程序的单元测试
- C# 图片添加旋转字体文字,实现图片装逼功能
- VS2015安装&简单的C#单元测试
- C#中DropDownList显示默认值
- C#后台无刷新页面弹出alert方法
- C#程序代码分析(第三周)
- C#ListView控件的相关用法
- C#中的Nullable及??操作符
- 转:C#中TransactionScope的使用方法和原理
- 《CLR Via C#》改变Visual Studio中Output Window输出内容的详细程度