什么是方法重写?什么是方法重载?构造方法可以被重载或重写吗?成员变量呢?

方法重载(Overload):在一个类中,有两个及以上的方法,它们方法名称相同,但参数列表不同,这些方法互相称为重载方法。

方法重写(Override):在子类和父类中,若有两个方法的名称和参数列表均相同,此时子类的方法将覆盖父类中的方法,称为方法重写。

区别与联系:

\ 重载(Overload) 重写(Override)
说明: 方法可在同一个类或子类中被重载 子类重写父类中可继承的方法,父类中的该方法为重写方法
生效时期: 编译期绑定 运行期绑定
方法名称: 相同 相同
参数列表: 不能相同 必须相同
返回类型: 可以相同,也可改变 必须相同
权限修饰符: 可以任意改变 应小于等于被重写方法的访问级别
异常抛出: 可任意改变 相比被重写的方法,不能有新的或范围更广的异常

重写,指的是方法,并没有涉及到成员变量。成员变量不会被重写,这里有另外一个基本概念:隐藏成员变量(Field Hidden)。

如果子类中的成员变量和父类中的成员变量名称相同,那么即使他们的类型不一样,父类中的成员变量都会被隐藏。此时,不能从子类的引用得到父类中隐藏的成员变量,而要从父类的引用才能得到。一般不推荐隐藏成员变量,因为这会使代码难以阅读。