专注

导航

面向对象基础-抽象类

我们再来观察,其实Animal类其实根本不可能实例化,你想,说一只猫长什么样子,可以想象,但是new Animal(),即实例化一个动物,动物长什么样子,其实是不知道的。
同样的道理,Animal中的getShoutSound()方法,也是没有任何含义的,所以,我们可以把virtual修饰符改成abstract,使之成为抽象的方法。C#中允许把类和方法声明为abstract,即抽象类和抽象方法。

   1:  abstract class Animal
   2:  {
   3:      ...............
   4:      protected abstract string getShoutSound()
   5:   
   6:  }

注意的地方:
(1)抽象类不能实例化:即刚才说的动物实例化没有任何意义;
(2)抽象方法是必须被子类重写的方法,不重写的话,他的存在也是没有意义的;
(3)如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般的方法;
所以,可以这样子理解:
抽象类通常代表一个抽象的概念,他提供一个继承的出发点,当设计一个新的抽象类的时候,一定用用来继承的,所以,在一个以继承关系形成的等级结构里面,输液节点应当是具体类,而树枝节点绝当是抽象类。

3

posted on 2011-11-13 12:30  陈啊M  阅读(137)  评论(0)    收藏  举报