前言:18年面试碰见了一道很简单的题:重载的英文单词是哪个,重写的英文单词是哪个?如此简单的问题,没选出来,因为我把单词给忘了,概念我到是背了一堆,还没施展,就已经被人家拒之千里之外了。(此事不想再提)
今天在写这篇文章之前,我发现了我还是没有记住单词,这好像是我的槛,跨不过去了,故特意写了这篇文章,大家也可以收藏下,方便自己在地铁、公交上看。
方法的重载(overload)和重写(override)都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则),还有构造器是不能被继承的,但是它可以被重写。
简短的总结下:
重载(overload)
- 必须是同一个类;
- 方法名(也可以叫函数)一样;
- 参数类型不一样或参数数量不一样。
重写(override)
- 方法名相同,参数类型相同;
- 子类返回类型小于等于父类方法返回类型;
- 子类抛出异常小于等于父类方法抛出异常;
- 子类访问权限大于等于父类方法访问权限。
构造器:不能被继承、但可以被重写。
概念这个东西没法说只能死记硬背了,俗话说:书读百遍其义自见;看的遍数多了也就自然而然地记住了。