weixin_42509606 2013-12-09 18:36
浏览 251
已采纳

关于重写方法后出的异常

JAVA中重写的方法能不能比被重写的方法抛出更多的种类的异常?

  • 写回答

2条回答 默认 最新

  • jinfreaks 2013-12-09 21:04
    关注

    重写的主要优点是能够定义子类特有的特征:
    如:
    public class Father{
    public void speak(){
    System.out.println("Father");
    }
    }
    public class Son extends Father{
    public void speak(){
    System.out.println("son");
    }
    }

    这也叫做多态性,重写方法只能存在于具有继承关系的类中,重写方法只能重写父类非私有的方法,当上例中Father类的speak()方法为private时,Son类不能重写speak()方法,此时在Son类中定义的speak()方法相当于一个新的方法,与Father中的speak()方法没有任何关系.
    当Father类的speak()方法声明为final时,无论该方法的修饰符是public,protected还是默认,Son类根本不能重写speak()方法,试图编译代码时,编译器会报错.例:
    public class Father{
    final void speak(){
    System.out.println("Father");
    }
    }
    public class Son extends Father{
    public void speak(){
    System.out.println("son");
    }
    }//编译器错误信息:Son 中的 speak() 无法覆盖 Father 中的 speak();被覆盖的方法为 final

    重写方法的规则:
    1.参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载;
    2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载;
    3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private);
    4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.例如:
    父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常(unchecked exception,如运行时异常).

    重载方法的规则:
    1.必须具有不同的参数列表;
    2.可以有不同的返回类型,只要参数列表不同就可以了;
    3.可以有不同的访问修饰符;
    4.可以抛出不同的异常;

    示例:
    public class Father{
    public void speak(){
    System.out.println("Father");
    }

    public void speak(String info){
    System.out.println("Father speak:" + info);
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成