如果继承是面向对象设计理论的基石,那么抽象理论和方法就是继承理论的顶梁柱。在汉语词典中抽象是这样解释的:将几个有区别的物体的共同特性或形象抽取出来或孤立地进行考虑的行动或过程。可以看出,抽象就是从事物中提取特征和性质,并不是事物本身。具体应该如何理解呢?
大家都知道,学生有一个共同的特征是必须学习,那么学什么,如何学,每一个学生就不一样了。这样可以提取学习这个动作为抽象方法,而不考虑具体内容。动物类都有叫的动作,具体动物如何叫,暂不考虑,先把共性提取出来。简单地说,用来描述这些共性的类就是抽象类,抽象类中不考虑具体实现,只确定必须具有的行为,就是抽象方法。
抽象方法是一个没有实现的方法,使用关键字abstract定义抽象方法。语法如下:
<访问修饰符> abstract 返回类型 方法();
例如:
public abstract void Cry();
当一个实例方法声明中含有abstract修饰符时,称之为抽象方法(abstract methods)。抽象方法只允许在抽象类中声明,但是并不能实现,抽象方法声明中只包含方法的签名,抽象方法在其派生类中使用override关键字来重写。在抽象方法声明中,不允许出现static、virtual或override中的任一修饰符。
注意:和普通方法不同,抽象方法没有闭合大括号,在方法括号后面直接加“;”号,表明抽象方法中没有方法体,即没有具体的实现。
抽象类是特殊的类,只是不能被实例化;除此之外,具有类的其它特性;抽象类可以包含抽象方法,其它类不能。抽象方法只能声明于抽象类中,且不包含任何实现,只包含方法的签名,派生类必须重写它们。另外,抽象类可以派生自一个抽象类,可以重写基类的抽象方法也可以不重写,如果不重写,则其派生类必须重写它们。
抽象类声明时类前加关键字abstract。抽象类不能被实例化,因为没有具体实现的方法。抽象类中可以包含非抽象的方法,也可以包含非抽象的方法。
注:子类继承抽象父类后,可以使用override关键字重写父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为abstract。
抽象类的定义方法如下:
<访问修饰符> abstract class 类名
{
//抽象类体
}
using System;
public abstract class Parta
{
public abstract void Name();
public void A()
{
Console.WriteLine("姓名");
}
}
public class Partb: Parta
{
public override void Name()
{
Console.WriteLine("姓名李哲宇");
}
}
class Test
{
public static void Main()
{
Partb x = new Partb();
x.Name();
}
}
说明:抽象类中的方法除了抽象方法外,还可以包含非抽象方法,或者说是具体方法,但是包含抽象方法的类一定是抽象类。
抽象类的特点:
1、抽象类是子类的描述,就保鲜模板。只有被子类继承,才有实际意义。
2、抽象类不能实例化。
3、抽象类不能是密封的或者静态的,即抽象类前不能有static或sealed关键字。