override是对积累方法的重写,需要重写的方法在该类的基类中需要用virtual或abstract来修饰,当然用virtual来修饰的方法有自己的实现,而用abstract来修饰的方法不允许有实现,只允许继承该类的子类重新写该方法且子类必须有实现的方法。
我们来看一个例子来表述两个字段的不同
abstract class AnmialClass { private int foot; public int Foot { get { return foot; } set { foot = value; } } public abstract void Mess(); public virtual void Mess1() { MessageBox.Show("我是Mess1"); } public void mess2() { MessageBox.Show("我是Mess2"); } }
这是父类的相关定义
class PeopleClass:AnmialClass { public override void Mess() { MessageBox.Show(“我是子类的Mess”); } public override void Mess1() { MessageBox.Show("我是子类的Mess1"); } public new void Mess2() { MessageBox.Show("我是子类的Mess2"); } }
该类时继承AnmialClass类的子类
PeopleClass pe = new PeopleClass();
pe.mess();
pe.mess1();
pe.mess2();
AnmialClass p = pe as AnmialClass;
p.mess1();
p.mess2();
我们将会发现输出的结果是:
”我是子类的Mess“
”我是子类的Mess1“
”我是子类的Mess2“
”我是子类的Mess1“
“我是Mess2”
new修饰符只是将方法隐藏,当父类被实例化时,通过父类调用的方法依然是父类的方法,而overide是把父类方法重写。