OverLoad 和 Override 的区别
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
重写(Overriding)是父类与子类之间多态性的一种表现,
而重载(Overloading)是一个类中多态性的一种表现。
OverLoad ( 重载 ):
1.发生在同一个类中;
2.方法名相同,参数列表不同;
3.与 返回值无关、与 final 无关、与 修饰符 无关、与 异常 无关;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(
关于重载方法的解释:
重载的作用就是同一个函数有不同的行为,
因为同一个函数,所以必须在一个域中,不是在一个域中的函数是无法构成重载的,这个是重载的重要特征
函数的行为结果只与其参数列表不同有关,传什么样的参数得什么样的结果,因此不能通过访问权限、返回类型、抛出的异常进行重载。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。
重载是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段)
)
Override ( 重写 ) :
1.发生在子类和父类之间;
2.方法名相同,参数列表相同;
3.返回值相同、 不能是 final 方法、
重写的方法不能有不父类方法更严格的修饰符权限(修饰符大于父类)、重写的方法所抛出的异常不能比父类的更大(异常小于父类);
4.****特别注意:
如果父类私有的方法,子类拥有方法签名相同的方法,子类不属于重写父类的方法,该方法属于子类的新方法 ;
方法签名:http://www.cnblogs.com/cfb513142804/p/4214863.html
( 注 :子类拥有父类一切非私有的属性和方法)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(
关于重写特征的解释:
重写又叫覆盖:
覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
覆盖的方法的返回值必须和被覆盖的方法的返回一致;
覆盖的方法的访问修饰符权限必须比被覆盖的方法的访问修饰符权限一致,或比其大;
覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
方法被定义为final不能被重写。
更过关于 final 内容,查阅:http://www.cnblogs.com/cfb513142804/p/4214805.html
对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重写覆盖,如果定义的话,也只是定义了一个新方法,而不会达到重写覆盖的效果。(通常存在于父类和子类之间。private修饰的方法只能在本类中使用)
)