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条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况