A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 mr_jack 于 2014-3-31 09:46 编辑

举个简单的列子说明抽象类,虚方法和接口的关系

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

4 个回复

正序浏览
多谢大家,很清楚!
回复 使用道具 举报
czwanglei 发表于 2014-3-30 12:13
这样的可以多加分。。

谢谢老大支持
回复 使用道具 举报
♠Akechi♠ 发表于 2014-3-30 09:29
先建立一个狗的类(类:其实就是具有共同特征的事物的抽象)

然后建一个猫的类

这样的可以多加分。。
回复 使用道具 举报
先建立一个狗的类(类:其实就是具有共同特征的事物的抽象)
  1. class Dog
  2.     {
  3.         private string name;
  4.         public Dog(string name)
  5.         {
  6.             this.name = name;
  7.         }
  8.         public void 叫()
  9.         {
  10.             Console.WriteLine("旺旺");
  11.         }
  12.     }
复制代码

然后建一个猫的类
  1. class Cat
  2.     {
  3.         private string name;
  4.         public Cat(string name)
  5.         {
  6.             this.name = name;
  7.         }
  8.         public void ()
  9.         {
  10.             Console.WriteLine("喵喵");
  11.         }
  12.     }
复制代码

比如后面再添加牛,马等等这些动物,我们发现这些有很多相似的地方,那么我们就把他们这些一样的行为都抽象起来,那么现在就是抽象类,和继承出场的时候了
  1. abstract class Animal//抽象类(动物)
  2.     {
  3.          private string name;      
  4.          public Animal(string name)
  5.          {
  6.              this.name = name;
  7.          }
  8.          public abstract void jiao(); //因为呢,动物都会叫所以写一个叫的抽象方法,这个呢,需要在派生类中实现         
  9.     }

  10.      class Dog : Animal  //继承Animal
  11.     {
  12.          public Dog(string name):base(name) //调用Animal构造函数
  13.          {
  14.   
  15.          }
  16.          public override void jiao()     //重写派生类的叫的方法,实现自己的叫
  17.          {
  18.              Console.WriteLine("旺旺");
  19.          }
  20.     }
  21.      class Cat : Animal //继承Animal
  22.     {
  23.       
  24.       public Cat(string name):base(name)
  25.          {
  26.   
  27.          }
  28.          public override void jiao()
  29.          {
  30.              Console.WriteLine("喵喵");
  31.          }
  32.     }
复制代码

这样清晰多了,以后如果要添加,牛,马,羊,之类的都可以继承Animal这个抽象类,因为这些牛马羊都是动物,只有“is a”关系使用继承关系。
接下来我们发现像老鹰这些动物都会飞,但是呢牛马羊不会飞,我们就建立一个飞的接口
  1. abstract class Animal
  2.     {
  3.          private string name;
  4.          public Animal(string name)
  5.          {
  6.              this.name = name;
  7.          }
  8.          public abstract void jiao();                 
  9.     }
  10.      interface IFly
  11.      {
  12.          void Fly();
  13.      }
  14.      class Dog : Animal
  15.     {
  16.          public Dog(string name):base(name)
  17.          {
  18.   
  19.          }
  20.          public override void jiao()
  21.          {
  22.              Console.WriteLine("旺旺");
  23.          }
  24.     }
  25.      class Cat : Animal
  26.     {
  27.       
  28.       public Cat(string name):base(name)
  29.          {
  30.   
  31.          }
  32.          public override void jiao()
  33.          {
  34.              Console.WriteLine("喵喵");
  35.          }
  36.     }
  37.      class Laoying : Animal,IFly
  38.      {
  39.          public Laoying(string name)
  40.              : base(name)
  41.          {
  42.   
  43.          }
  44.          public override void jiao()
  45.          {
  46.              Console.WriteLine("老鹰叫");
  47.          }
  48.          public void Fly()  //实现接口
  49.          {
  50.              Console.WriteLine("老鹰在天空中高高的飞翔");
  51.          }
  52.      }
复制代码

如果还要添加什么超人啊,飞机啊,都可以继承IFly的接口,去实现Fly()的方法。
接口简单理解就是一种约定,使得实现接口的类或结构在形式上保持一致。个人觉得,使用接口可以使程序更加清晰和条理化,不用去管是怎么实现的,具体的实现让继承这个接口的类去实现。比如上边代码,我们定义了一个飞的接口,让继承它的类去实现这个飞的方法,比如这里老鹰,老鹰会飞,那么继承这个接口以后,实现自己是怎么飞的,再比如我玄幻一点,孙悟空,他也会飞,那么他继承这个接口以后,去实现,一个跟头十万八千里,哈哈,是不是很容易理解。

虚方法例子:
简单举个例子,比如说从前有个唱戏的,这个人叫A,A很受欢迎,每次都有很多人来光顾,但是现在他病了,不能唱了,但是呢他有个儿子B,从小受父亲的影响,模仿父亲很像,唱的也很好,这时候B上台去唱了,但是B用自己的方式去唱。最后这场戏很圆满的结束了。
  1. class Fuqin
  2.     {
  3.         public virtual void Chang()
  4.         {
  5.             Console.WriteLine("我是父亲,我用我的方式去唱");
  6.         }
  7.     }
  8.     class Erzi : Fuqin
  9.     {
  10.         public override void Chang()
  11.         {
  12.             Console.WriteLine("我是儿子,我用我的方式去唱");
  13.         }
  14.     }
复制代码

就这样简单接收下虚方法。

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马