Java重写与重载
重写(override)
子类重新定义父类的方法
规则:
-
参数列表必须与被重写的方法相同
原因:Java是靠方法名和参数列表来区分方法的,如果参数列表不同Java会认为这是另外一个方法,就不构成重写了。
-
返回类型必须与被重写的方法相同
原因:如果返回类型与被重载的方法不一致,运行时如果发生重载就会有类型冲突。
-
访问权限不能比父类中被重写的方法更低
原因:根据Java继承的内存分配原理我们知道子类和父类是链表结构储存的(对这一块不了解的朋友可以看前面的博文Java的继承),当沿着链表搜索方法时,如果子类的访问权限比父类低,就可能直接跳过子类搜索到父类的方法,这不符合Java中方法是逐个类向下完善的设计理念。
-
声明为static和private的方法不能被重写,但能够被再次声明
原因:static是类的方法,而不是对象的方法,因此没办法重写。private方法通过子类是永远无法搜索到的,因此不能被重写。但是子类可以再次声明。
重载(overload)
同一个方法的不同实现形式,重载的方法调用时会根据形参选用对应的方法执行