软件构造——Override和Overload

1.override重写/覆盖

方法重写是一种语言特性,它允许子类提供(已经由其父类之一提供的)方法的特定实现。 

1、子类中方法名、参数与父类相同(或满足LSP)。

        不使用@Override的话,若参数不同,会被当作重载运行。使用@Override ,compiler 会检查覆盖方法和被覆盖的方法签名是否完全一致。

       LSP要求子类中应前置条件更弱,后置条件更强,不变量更强。但目前java中将前置条件更弱看作Overload。方法重写的时候,如果父类没有抛出任何异常,那么子类不可以抛出checked异常,父类抛出异常,子类抛出相同或更准确的异常或不抛出异常。子类重写方法的时候可以随时抛出运行时异常(RuntimeException),包括空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等。

2、父类中被定义为final的方法不能被重写。

     final :

      A final field: prevents reassignment to the field after initialization

      A final method: prevents overriding the method

      A final class: prevents extending the class

3、private的方法不能被重写。

         在其子类中重写只是新定义了一个方法,并没有对其进行覆盖。

4、如果父类型中的某个函数实现体为空, 意味着其所有子类型都需要这个功能, 但各有差异,没有共性,在每个子类中均需要重写。

5、重写时,可以利用super()复用父类型中的函数功能。

6、实际执行时调用哪个方法,运行时决定。

       父类 a=new 子类();在编译时看等号前面,因方法存在重写,等执行时,看等号后,方确定执行子类的方法。

2、overload重载

1、必须有不同的参数列表(参数类型或个数或顺序)

      可以相同/不同的返回值类型、相同/不同的public/private/protected、相同/不同的异常。

2、可以在同一个类内重载,也可在子类中重载。

3、在编译阶段时决定要具体执行哪个方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值