问题描述
publicinterfaceActionListenerextendsEventListener{/***Invokedwhenanactionoccurs.*/publicvoidactionPerformed(ActionEvente);}publicabstractclassOutputActionextendsActionListener{publicOutputAction(ProgramInfoprogramInfo){this(programInfo,"出力");}publicabstractvoidactionPerformed(ActionEvente)throwsOfsException;}上面连个类。。第二给类编译的时候有错。Multiplemarkersatthisline-implementsjava.awt.event.ActionListener.actionPerformed-ExceptionOfsExceptionisnotcompatiblewiththrowsclauseinActionListener.actionPerformed(ActionEvent)WHY?
解决方案
解决方案二:
子类不能比父类抛出更多异常吧
解决方案三:
该回复于2010-12-14 13:33:53被版主删除
解决方案四:
我以前在jbuilder下用JDK1.4就是这么做的。现在用了ecliplise,JDK是1.6.就不行了。难道是JDK升级的原因吗。。。。。。
解决方案五:
子类方法覆盖(override)父类方法不可以声明抛出更多的检验异常(CheckedException),但是可以声明抛出更多的运行时异常(RuntimeExceptionorsubclassofRuntimeException)。这个和JDK升级没有关系,这是基本语法。
解决方案六:
引用3楼fength2004的回复:
我以前在jbuilder下用JDK1.4就是这么做的。现在用了ecliplise,JDK是1.6.就不行了。难道是JDK升级的原因吗。。。。。。
我不知道jdk1.4和1.6对异常的区别,但是我知道有下面一条规定:子类方法抛出的异常,应该是父类方法跑出异常的子类,或者子类方法不抛出异常。接口中没有跑出异常,子类抛出异常了肯定有问题,还有,接口不是应该用implements吗,LZ用extends编译也能通过?考虑下面的代码,假如:publicclassAextendsOutputAction{publicstaticvoidmain(String[]args){ActionListenerlistener=newA();try{listener.actionPerformed(ActionEvente);}catch(OfsExceptione){.......}}}OfsException这个异常LZ觉得能捕获到吗?
解决方案七:
引用4楼wingardium的回复:
子类方法覆盖(override)父类方法不可以声明抛出更多的检验异常(CheckedException),但是可以声明抛出更多的运行时异常(RuntimeExceptionorsubclassofRuntimeException)。这个和JDK升级没有关系,这是基本语法。
不一定是只有checkedexception吧。自定义的不都是runtimeexception吗
解决方案八:
引用6楼mtv0199的回复:
不一定是只有checkedexception吧。自定义的不都是runtimeexception吗
一定是只有checkedexception才有这种限制,你自己写个代码试试不就清楚了。自定义的是不是RuntimeException取决于你定义的异常继承了什么。