Appearance
抽象类
在虚方法那一节中可以知道,我们可以写一个能够被子类重写的方法,但是子类呢,可以不重写父类的方法,而是直接去使用父类方法。
也就是说,一个普通的类中,我们可以有需要重写的方法和不需要重写的方法。但是有一种情况:类里的所有方法都需要重写,所有属性也都需要初始化。
真如上所说,那么在方法前一个个写virtual未免太过繁琐,所以提出了"抽象类"这样一个便利的类,天生所有方法都是虚方法。
抽象类中的方法必须全部重写,也就是说,抽象类其实什么也不管,只提出概念,具体实现全部交给子类去做。
但反过来想:如果子类,必需要重写父类的方法,那么在父类里写方法体其实也没有意义了。所以,如果遇到了"子类一定有自己的实现"这样特性的方法,那么就选择抽象方法吧。
避免混乱,抽象方法必须写在抽象类里。
假设,猫、狗作为动物的子类,它们必然的具有"叫"这一行为。所以我们可以把动物做成抽象类,"叫"这个动作做成抽象方法。
csharp
abstract class Animal
{
public abstract void Say();
}
class Cat : Animal
{
public override void Say() // override, 重写,重写的关键词
{
Console.WriteLine("Miao!");
}
}
class Dog : Animal
{
public override void Say()
{
Console.WriteLine("Wang!");
}
}
public class App
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.Say();
Cat cat = new Cat();
cat.Say();
Console.ReadKey();
}
}
切记!!抽象类本身不能实例化