课程分类

课程介绍
课程目录
用户评论
课程介绍
课程目录
用户评论

你将获得

  • 掌握某些知识点
  • 学会某些技巧(或思路)

教学服务

  • icon

    1v1专属答疑服务

  • icon

    BAT专家面试辅导

讲师介绍

  • 计算机软件博士,有32年软件开发和教学经验,《深度学习程序设计实战》作者。方老师擅长用通俗易懂的实例,结合代码,讲解复杂难懂的数学和计算机理论知识。他的课程常融会贯通计算机各学科领域,如博弈、编译、递归、多线程、贝叶斯网络等等。许多学生认为方博改变了他们对计算机科学和数学的看法,影响了他们一生。

  • 课程详情

    函数重定义是指子类对父类中的一个方法进行重新定义,其中函数名、参数表等都不发生变化,仅仅函数体发生变化。函数重定义是面向对象方法的两个基石之一(另一个是封装)。封装是指把数据和操作数据的方法封装在一个类中,这比较好理解。但是重定义就没有那么好理解了。很多程序员用不好重定义,从而导致程序设计水平和能力不能取得实质性的提高,原因就是失去了重定义的助力。这就好比,别人开飞机,你骑自行车,任你再努力,也赶不上人家轻松一脚油门。

    人们通常认为函数重定义的目的是使子类在某个指定方法上,表现得与父类不同。但这并不是重定义的本质,重定义的本质是直接或间接地改变父类的行为。

    比如设A是B的父类,且A中存在一个方法m1(),则B继承了这个方法,这意味着我们也可以对B类的对象调用m1()方法,并且其行为与A中的m1()方法完全相同。如果B重定义了m1()方法,并且在函数体中执行了与A的m1()不同的操作,则程序员在对B类对象执行m1()方法时,函数执行的结果就与A中的m1()方法不同。

    但问题是,如果这就是重定义的本质的话,那我们为什么一定要在B中定义一个m1()方法呢?我们完全可以在B中定义一个m2()方法,然后针对B类对象调用m2()不就行了吗?

    所以,子类改变父类的行为并不是子类进行重定义的本质。重定义有其必须存在的理由,本节课就这个问题展开讨论,让你对面向对象方法,特别是重定义技术的认识有一个本质上的提高。