提到抽象我们首先就会想到C#中的3个关键词,virtual、abstract、override。下面逐一来讨论每一个关键字
virtual:虚方法,表示父类中的方法是虚拟的,没有真正意义上的实现,具体的实现可以交给子类去实现,但是这里面可以有父类的具体实现代码,主要用于子类中没
重写的时候就可以调用父类的方法。
父类的代码:
class Person
{
public int Age { get; set; }
public string Name { get; set; }
//virtual为必须加的,虚方法存在的意义就是让子类重写
public virtual void ShowNational() { }
}
子类要重写父类中的虚方法,需要用到override关键字
class Chinese:Person
{
public void Hukou()
{
Console.WriteLine("中国");
}
public override void ShowNational() {
Console.WriteLine("我是中国人");
}
}
重写和重载的区别:重写是子类去重新实现父类中没有具体实现的方法,而重载是在一个类中同样一个方法名形式参数不同的方法。
abstract:抽象。用在类名前表示该类是抽象类。抽象类中没有对抽象方法的具体实现代码,这些工作完全交给了子类去实现。这里和上面的虚方法不一样,这里绝对不可以有
实现的代码。
<pre name="code" class="csharp"> /// <summary>
/// 因为父类中的抽象方法不会有任何作用,所以我们就不对他做任何操作,只需要在将该类变为抽象类abstract
/// 并且在方法钱也得加abstract关键字
/// </summary>
abstract class Person
{
public int Age { get; set; }
public string Name { get; set; }
abstract public void ShowNational(); //这里没有{}
}
子类重写父类的抽象方法
<pre name="code" class="csharp"> class Chinese : Person
{
public void Hukou()
{
Console.WriteLine("中国");
}
public override void ShowNational()
{
Console.WriteLine("我是中国人");
}
}
为什么我们要用抽象类呢?可以参考这篇文章,用java中的抽象类来说明的http://blog.youkuaiyun.com/zltpc007/article/details/1800534。
下一节将探讨一下多态