Abstract抽象类下的子类的方法重写原理:其实就是重写方法地址
假如Transportation为一个抽象类,其下的方法有Transport,方法地址为0x1001
Train和Airplane为其子类,都有重写方法Transport。
若Train方法地址为0x2001,Airplane方法地址为0x3001
在实例子类并调用其方法时,实例对象是在运行时实时修改方法地址的,而不是在编译时修改。如:
简单编写一个抽象类Transportation:
public abstract class Transportation { public string Type{get;set;} public abstract void Transport(); }
Person类中有方法:
public void GoHome(Transportation type) {
//调用抽象类中的抽象方法
type.Transport(); }
然后在Main实例一个Person对象,在Person对象中调用抽象方法:
static void Main() { Person p1 = new Person(); //使用火车回家 p1.GoHome(“火车”); p1.GoHome(new Train());//此时编译时无方法地址无改变,直到运行时修改为0x2001 //如果改为使用飞机回家 p1.GoHome(“飞机”); p1.GoHome(new Airplane());//同上,运行时修改为0x3001 }