高质量java代码笔记---建议06.覆写变长方法也循规蹈矩

覆写(重写)必须满足的条件:

  • 重写方法不能缩小访问权限
  • 参数列表必须与被重写方法相同
  • 返回类型必须与被重写方法的相同或是其字类
  • 重写方法不能抛出新的异常,或者超出父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
public class Client {
    public static void main(String[] args) {
        //向上转型 形参列表由父类决定
        //在编译时。"base.fun(100,50)中的50这个实参会被编译器“猜测”而编译成{50}数组"再由子类sub.fun执行
        Base base=new Sub();
        base.fun(100,50);
        //不转型
        Sub sub=new Sub();
        //调用的是子类的fun方法 ,50这里编译报错
        //cannot be applied
        /*这里编译器并不会把50转换成数组,因为数组本身就是一个对象,编译器并不会聪明到把两个没有
         继承关系的类之间做转换,Java严格要求类型匹配的,类型不匹配编译器自然就会拒绝执行*/
        sub.fun(100,50);
    }
}
class Base{
   void fun(int price,int...discounts){
       System.out.println("基类的fun方法");
   }
}
class Sub extends Base{
    /**
     * 重写的时候不会报错
     * @param price
     * @param discounts
     */
    @Override
    void fun(int price, int[] discounts) {
        System.out.println("子类的fun方法");
    }
}

该代码会编译不通过,在直接调用字类的fun方法的时候 sub.fun(100,50);这里重写是正确的,并不会报错,这是一个特例,覆写的方法列表竟然与父类不同,违背了覆写的定义,并且引发莫名奇妙的错误,所以变长方法覆写时,需要注意,覆写方法不仅参数与父类相同,类型、数量,还要包括显示形式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值