普通方法在子类中 可以用 new 隐藏 new可写/可不写
虚方法 在子类中可以 用 override 复写也可以 用 new 隐藏 new可写/可不写
抽象方法没有方法体,在子类中必须override 复写
public abstract class Parent
{
//普通方法可以用 new 隐藏 new可写/可不写
public void CommonSay()
{
Console.WriteLine("父级的普通方法");
}
//虚方法 在子类中可以 用 override 复写也可以 用 new 隐藏 new可写/可不写
public virtual void VirtualSay()
{
Console.WriteLine("父级的虚方法");
}
//抽象方法没有方法体,在子类中必须override 复写
public abstract void AbstractSay();
}
public class Child: Parent
{
public new void CommonSay()
{
Console.WriteLine("子级的普通方法");
}
public override void VirtualSay()
{
Console.WriteLine("子级的虚方法");
}
public override void AbstractSay()
{
Console.WriteLine("子级的复写抽象方法");
}
}
执行以下代码用谁的方法:
static void Main(string[] args)
{
Parent parent = new Child();
parent.CommonSay();
parent.VirtualSay();
parent.AbstractSay();
Console.ReadLine();
}
普通方法 由编译时决定--提高效率
所以确定的左边的类型 是 parent 那么右边的类型 不管是child 还是 parentChild 都没有用
虚方法由运行时决定--多态灵活
子类复写了就用子类的,没有复写就用父类的
抽象方法由运行时决定--多态灵活
父类根本没有方法体,只能用子类的