C#抽象类,抽象方法,虚方法
//方法重写:override如果没有使用override修饰,那么该方法为覆盖(前提:方法是从父类中继承过来的)
两者区别:
总结:抽象方法是只有方法名称,没有方法体(也就是没有方法具体实现),子类必须重写父类抽象方法;
虚函数是该方法有方法体,但是子类可以覆盖,也可不覆盖。
(1)虚方法有方法体,抽象方法没有方法体。抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化;
(2)抽象方法只能在抽象类中声明,虚方法不是;
(3)派生类必须重写抽象类中的抽象方法,虚方法则不必要。
//虚方法和抽象方法的区别:
//1.抽象方法只有声明没有实现,需要在子类中去实现
//虚方法有声明有实现,虚方法在子类中可以重写,也可以不重写如果不重写的话默认使用父类的实现
//2.抽象类不能实例化(不可以使用new)只能实例化实现了全部抽象方法的子类
//虚方法和抽象方法的共同点:
//都是用override修饰重写
抽象类 抽象方法
//有时设计类仅仅为了表达抽象的概念,不与具体的事物相联系,只作为其派生类的基类使用,用来描述所有子类的共同特征,这时我们可以使用抽象类
//1.抽象类不能被直接实例化,抽象类中可以包含普通方法
//2.抽象方法只声明不实现,但是在具体的子类中必须全部实现
//3.抽象类中可以包含非抽象方法,抽象方法必须写在抽象类中
//4.抽象方法不能使用Private访问权限修饰符
public abstract class Food {
//抽象方法需要添加abstract关键字
//1.在父类中定义的抽象方法不能实现
public abstract void Eat();
//抽象类中可以包含普通的方法
public void Test(){
Console.WriteLine("抽象类中可以包含普通的方法");
}
}
public class Apple:Food{
//2.子类实现父类抽象方法时,需要添加override关键字
public override void Eat()
{
Console.WriteLine("HP+10");
}
}
public class Water : Food
{
public override void Eat()
{
Console.WriteLine("MP+10");
}
}
class Program
{
static void Main(string[] args)
{
Food f1 = new Apple();
Food f2 = new Water();
f1.Eat();
f2.Eat();
f1.Test();
}
}
虚方法
public class BaseClass //创建一个基类
{
public virtual string GetName() //使用virtual关键字创建父类中的虚方法
{
return "父类虚方法体":
}
}
public class SubClass:BaseClass //子类继承父类
{
public override string GetName(); //子类重写父类虚方法
{
return "重写父类虚方法!";
}
}
以上的示例:父类中的虚方法被派生类重写了。
因为经历,
所以懂得;
因为懂得,
所以珍惜。

浙公网安备 33010602011771号