首页 > 代码库 > OverLoad 和 Override 的区别

OverLoad 和 Override 的区别

方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。   
重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。

    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。

    是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段)

 

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。

    不能通过访问权限、返回类型、抛出的异常进行重载。 

    重载的作用就是同一个函数有不同的行为,因此必须在一个域中,函数名称相同但是函数参数不同,不是在一个域中的函数是无法构成重载的,这个是重载的重要特征

OverLoad ( 重载 ):

    1.发生在同一个类中;

    2.方法名相同,参数列表不同;

    3.与 返回值无关、与 final 无关、与 修饰符 无关、与 异常 无关;

 

Override ( 重写 ) :

    1.发生在子类和父类之间;

    2.方法名相同,参数列表相同;

    3.返回值相同、 不能是 final 方法、

     重写的方法不能有不父类方法更严格的修饰符权限(修饰符大于父类)、重写的方法所抛出的异常不能比父类的更大(异常小于父类);

    4.****特别注意:

      如果父类私有的方法,子类拥有方法签名相同的方法,子类不属于重写父类的方法,该方法属于子类的新方法 ;

      ( 注 :子类拥有父类一切非私有的属性和方法)

( 注:

    

重写又叫覆盖:

    覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;        

    覆盖的方法的返回值必须和被覆盖的方法的返回一致

    覆盖的方法的访问修饰符权限必须比被覆盖的方法的访问修饰符权限一致,或比其大        

    覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类      

    方法被定义为final不能被重写。       

    对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重写覆盖,如果定义的话,也只是定义了一个新方法,而不会达到重写覆盖的效果。(通常存在于父类和子类之间。private修饰的方法只能在本类中使用)  

)

    

OverLoad 和 Override 的区别