问: 什么是方法重写?什么是方法重载?成员变量可以被重写吗?
方法重载(Overloading):在一个类中,有两个及以上的方法,它们方法名称相同,但参数列表不同,这些方法互相称为重载方法。
方法重写(Overriding):在子类和父类中,若有两个方法的名称和参数列表均相同,此时子类的方法将覆盖父类中的方法,称为方法重写。
区别与联系:
\ | 重载(Overloading) | 重写(Overriding) |
---|---|---|
说明: | 方法可在同一个类或子类中被重载 | 子类重写父类中可继承的方法,父类中的该方法为重写方法 |
生效时期: | 编译期绑定 | 运行期绑定 |
方法名称: | 相同 | 相同 |
参数列表: | 不能相同 | 必须相同 |
返回类型: | 可以相同,也可改变 | 必须相同 |
权限修饰符: | 可以任意改变 | 应小于等于被重写方法的访问级别 |
异常抛出: | 可任意改变 | 相比被重写的方法,不能有新的或范围更广的异常 |
重写,指的是方法,并没有涉及到成员变量。成员变量不会被重写,这里有另外一个基本概念:隐藏成员变量(Field Hidden)。
如果子类中的成员变量和父类中的成员变量名称相同,那么即使他们的类型不一样,父类中的成员变量都会被隐藏。此时,不能从子类的引用得到父类中隐藏的成员变量,而要从父类的引用才能得到。一般不推荐隐藏成员变量,因为这会使代码难以阅读。
如有问题,欢迎交流~ (完)
博客原文:Deecyn’s Blog