码迷,mamicode.com
首页 > 其他好文 > 详细

三、抽象类和接口的对比-----《大话设计模式》

时间:2015-09-15 23:21:32      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

一、抽象类

c#允许把类和方法声明为abstract,即抽象类和抽象方法。抽象类不能实例化,抽象方法必须被子类重写,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。

抽象类拥有尽可能多的共同代码,尽可能少的数据。

abstract class Animal                            //加abstract关键字,表明是抽象类
{
   ……
    protected abstract string getShoutSound();   //在方法返回值前加abstract表明此方法是抽象方法。
   ……                                                 //抽象方法没有方法实体,直接在括号后加分号
  
}

 

二、接口

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合,一旦类实现了接口,类就可以支持接口所指定的所有属性和成员;接口的命名前面加一个大写字母“I”。

声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式;实现接口的类必须要实现接口中的所有方法和属性。

接口不能实例化,不能有构造方法和字段,不能有修饰符,不能声明虚拟或静态。

interface IChange                                    //声明一个接口,此接口有一个方法
{
      string ChangeTing(string thing);              //参数是一个字符串变量,返回一个字符串
}
class MachineCat:Cat,IChange                                    //可以继承父类,也可以同时继承接口
{
  public MachineCat(): base()                                   //继承自父类的构造函数       
  {
  }
  public string ChangeThing(string thing)                       //实现接口的方法,不能加override修饰符
  {
    return base.Shout() + " 我有万能的口袋,我可变出" + thing;     //调用父类Cat的方法
  }
}
private void button6_Click(object sender, EventArgs e)         //窗口调用        
{
   MachineCat mcat = new MachineCat("叮噹");                   //实例化叮当猫类

    IChange array = new IChange(mcat);                         //将类实例赋值给接口

    MessageBox.Show(array.ChangeThing("各种各样的东西!"));      //实现接口方法

}

三、抽象类和接口的异同

抽象类

接口

可以给出一些成员的实现,即可以包含一般方法 不能包含成员的实现,必须由实现类实现
抽象成员可被子类部分实现 接口成员需要实现类完全实现
一个类只能继承一个抽象类 一个类可以实现多个接口
对类的抽象 对行为的抽象
设计角度:从子类中发现了公共的东西,泛化出父类,然后子类继承父类 设计角度:根本不知子类的存在,方法如何实现还不确认,预先定义
适用:对于一些相似的类对象,用继承抽象类 适用:如果行为跨越不同类的对象,可使用接口

三、抽象类和接口的对比-----《大话设计模式》

标签:

原文地址:http://www.cnblogs.com/shanymen/p/4811595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!