【软件构造】override和overload区别

1.override重写/覆盖

override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。 

(1)父类和子类中方法名、参数相同。

  使用@Override ,compiler 会检查覆盖方法和被覆盖的方法签名是否完全一致

(2)严格继承:子类只能添加新方法,无法重写超类中的方法。

(3)父类中被定义为final的方法不能被重写。

(4)覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

(5)父类中的被重写函数体不为空,也就是说,对于其大多数子类型来说,该方法是可以被直接复用的。

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

  (7)重写时,可以利用super()复用父类型中的函数功能,在此基础上可以进行扩展。

(8)能见度可以保持不变或增加,不能降低。

(9)实际执行时调用哪个方法,运行时决定。

(10)方法重写的时候,如果父类没有抛出任何异常,那么子类只可以抛出运行时异常,不可以抛出编译时异常。

如果父类的方法抛出了一个异常,子类重写时可以抛也可以不抛出异常,如果子类要抛出异常,那么子类在方法重写的时候不能抛出比被重写方法申明更加宽泛的编译时异常。

子类重写方法的时候可以随时抛出运行时异常(RuntimeException),包括空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等。
 

2、overload

overload

(1)必须有 不同的参数列表:参数类型、个数、顺序至少有一个不相同。

可以有:相同/不同的返回值类型;

              相同/不同的public/private/protected;

              相同/不同的异常;

          

(3)可以在同一个类内重载,也可在子类中重载。

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

(6)在编译阶段时决定要具体执行哪个方法。

3、对比

          override:父类和子类具有相同的签名;子类重载了父类的方法后,子类仍然继承了被重载的方法。

          overload:父类和子类签名不同;

public class Test{
    public static void main(String[] args{
       A a = new A();
       a.p(10);
    }
}

class B{
   public void p(int i){
   
   }
}


class A extends B{
//override
   public void p(int i){
       System.out.println(i);
   }
}

class A extends B{
//overload
   public void p(double i){
       System.out.println(i);
   }
}

大多数子类型来说,该方法

是可以3被直接复用的。
味着对其大多数子类型来说,该方法
是可以被直接复用的。
味着对其大多数子类型来说,该方法
是可以被直接复用的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重载发生在一个类中,方法名相同,但各自的参数不同,称为重载。重写发生在子类与父类之间,要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。123 #### 引用[.reference_title] - *1* [Java 重写(Override)与重载(Overload)](https://blog.csdn.net/weixin_30847271/article/details/101852544)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [【软件构造override和overload区别](https://blog.csdn.net/weixin_52966993/article/details/124827752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [重载(Overload)与重写(Override)的区别](https://blog.csdn.net/weixin_52754604/article/details/122968798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值