一、抽象要领:只在抽象类中界说,要领修饰符不能使用private,virtual,static.
抽象要领如下示:
public abstract class People //声明一个抽象类
{
public abstract void study(); //抽象要领只能界说在抽象类中。
}
public class Student:People //担任抽象类
{
public override void study() //重写抽象类的抽象要领
{
Console.WriteLine("好好学习,天天向上!");
}
}
public class Program
{
static void Main(string[] args)
{
Student t= new Student();//实例化派生类
People p= t; //使用派生类东西实例化抽象类
//以上两句等价于 People p = new Student();//使用派生类东西实例化抽象类;
p.study(); //使用抽象类东西挪用抽象类中的抽象要领study
}
}
总结:(1)象要领只能声明在抽象类中,使用关键字abstract
(2)抽象类中的抽象要领必需被子类重写。
【抽象要领没有要领体,子类必需重写要领体!!,因此抽象要领可以当作是一个没有要领体的虚要领】
二、虚要领:使用virtual修饰的要领:
虚要领可以有要领体。具体示例如下:
public class BaseClass //创建一个基类
{
public virtual string GetName() //使用virtual关键字创建父类中的虚要领
{
return "父类虚要领体":
}
}
public class SubClass:BaseClass //子类担任父类
{
public override string GetName(); //子类重写父类虚要领
{
return "重写父类虚要领!";
}
}
以上的示例:父类中的虚要领被派生类重写了。
注意事项:virtual修饰符不能与private、static、abstract、override修饰符同时使用。
ps:override修饰符不能与new 、static、virtual修饰符同时使用,并且重写要领只能用于重写基类中的虚要领。
虚函数的限制:
* 虚函数仅适用于有担任关系的类东西,所以只有类的成员函数才华说明为虚函数;
*静态成员函数、内联函数、结构函数不能是虚函数;
*析构函数可以是虚函数。
三、两者区别:
总结:抽象要领是只有要领名称,,没有要领体(也就是没有要领具体实现),子类必需重写父类抽象要领;
虚函数是该要领有要领体,但是子类可以笼罩,也可不笼罩。
(1)虚要领有要领体,抽象要领没有要领体。抽象要领是一种强制派生类笼罩的要领,否则派生类将不能被实例化;
(2)抽象要领只能在抽象类中声明,虚要领不是;
(3)派生类必需重写抽象类中的抽象要领,虚要领例不须要。