黑马程序员技术交流社区

标题: 子类重写父类方法,再调用父类方法有什么作用 [打印本页]

作者: 李阳Leo    时间: 2012-9-28 19:55
标题: 子类重写父类方法,再调用父类方法有什么作用
在ASP.NET生命周期这一季的视频中,通过反编译,发现源码中有这么一段
  1. protected override void FrameworkInitialize(){
  2.     base.FrameworkInitialize();
  3.     this.__BuildControTree(this);
  4.     base.AddWrappedFileDependencise(__fileDependencies);
  5.    base.request.ValidateInput();
  6. }
复制代码
其中这句代码
  1. base.FrameworkInitialize();
复制代码
子类重写了父类的方法,那么再调用父类的方法,其实调用的是子类的方法
那在子类重写的方法中,调用父类被重写的方法,不就是调用自己吗?
那不就调来调去出不来了?
{:soso_e135:}
作者: 彭书雄    时间: 2012-9-28 21:06
子类重写方法是在基类有此方法重写,那么声名一个子类的对象,调用的方法是子类的方法,
通过base转而调用父类中的方法,最终目的还是调用父类中的方法。
还有重写方法可以改变基类方法的作用,可以实现其他的效果,重写方法,和基类同名方法是两个不同实现的方法,
最主要你要分清楚  重写跟基类中的方法不一定实现同样的效果,还有基类也不一定知道派生类中是否重写了这个方法
作者: 李阳Leo    时间: 2012-9-28 22:38
彭书雄 发表于 2012-9-28 21:06
子类重写方法是在基类有此方法重写,那么声名一个子类的对象,调用的方法是子类的方法,
通过base转而调用 ...

也就是说,子类重写了父类的方法,然后在子类重写的这个方法中通过base调用父类的方法,最终就等于执行了两个方法
1.执行了父类中被重写的方法
2.执行了该行代码后面的内容(比如base.FrameworkInitialize();代码后的代码)

是这样理解吗?
作者: 彭书雄    时间: 2012-9-29 14:53
李阳_TickTock 发表于 2012-9-28 22:38
也就是说,子类重写了父类的方法,然后在子类重写的这个方法中通过base调用父类的方法,最终就等于执行了 ...

类中的方法 在本类中没有重写方法 而是子类中才能够对父类的方法进行重写, 需要重写的方法在子类中间加上override 进行方法内部重构,从而子类方法成为一个新的方法,只是方法名字相同而已,base.FrameworkInitialize() 只是在父类中对framework框架的初始化的方法, 类似声明变量,对变量初始化一个道理, 跟一般子类初始化对象一样,初始化的顺序是 先初始化父类构造函数 ,再是子类构造函数 ,接着父类变量,最后子类变量,
作者: 杨进    时间: 2012-9-29 15:08
哥们,拿到入学名额了吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2