普通方法在子类中 可以用 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 都没有用
虚方法由运行时决定--多态灵活
子类复写了就用子类的,没有复写就用父类的
抽象方法由运行时决定--多态灵活
父类根本没有方法体,只能用子类的