注册 登录
编程论坛 JAVA论坛

子类的实现接口与子类的父类共同定义的一个方法,接口与父类的该方法抛出不同的异常时:那么子类的实现接口里的该方法就不能改变在子类的父类中的该方法的异常接口如何理解

Honor000 发布于 2017-05-01 12:25, 2406 次点击
只有本站会员才能查看附件,请 登录

谢谢大家的帮助
public class InterfaceAndExceptionTest1 extends Father implements Jiekou{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*子类的实现接口与子类的父类共同定义的一个方法,接口与父类的该方法抛出不同的异常时:那么子类的实现接口里的该方法就不能
         * 改变在子类的父类中的该方法的异常接口
         * 如何理解?
         * */

    }
    public void method1(){//既不能声明父类中该方法已经声明的异常,有不能声明接口中该方法声明的异常,也不能同时声明所有异常
                         //只能什么异常都不能声明,这是什么意思?这就叫做“子类的实现接口里的该方法就不能改变在子类的父类
                         //中该方法的异常接口”?无法理解!!
        try{
            throw new Yingchang2Exception();
        }catch(Yingchang2Exception e){
            
        }
    }
   
}
interface Jiekou{
    public abstract void method1() throws Yingchang1Exception;//Father类的method1方法与接口类的抽象方法method1同名
}
class Father{
    void method1() throws Yingchang2Exception{//Father类的method1方法与接口类的抽象方法method1同名
        
    }
}
class Yingchang1Exception extends Exception{
   
}
class Yingchang2Exception extends Exception{
   
}
2 回复
#2
凌风zx2017-05-06 10:38
我觉得应该是这样的:
    method1这个方法属于重写(虽然在接口而言叫实现,但本质是一样的),java规定重写的方法的异常不能大于父类,Yingchang1Exception、Yingchang2Exception 这两个异常不存在上下级关系,所以不管抛出哪一个都违反java规定。
    可以让Yingchang2Exception 继承Yingchang1Exception,或者Yingchang1Exception 继承Yingchang2Exception,然后method1就可以抛出子异常了。  
#3
Honor0002017-05-22 22:19
回复 2楼 凌风zx
好的,懂了。谢谢你了
1