关于重写方法后出的异常

问题描述

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

解决方案

重写的主要优点是能够定义子类特有的特征: 如: 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); } }
解决方案二:
在接口中定义的方法例如:public void startTask(String jobId, String triggerId) throws AppException;在实现这个方法的时候 对于 AppException这个异常是默认抛出的 当然你也可以手动 throw new XXXException 等等

时间: 2024-11-27 03:41:41

关于重写方法后出的异常的相关文章

HibernateTemplate类里面的flush方法抛出了异常,异常处理

问题描述 图1图2图1中,HibernateTemplate类里面的flush方法抛出了异常,图2中,调用它的时候却不会抛出异常各位大神,请问下这是做了什么处理啊? 解决方案 解决方案二:异常分为两种:一种是检查式异常就是我们写程序时必须try,catch,比如IOException另一种就是运行时异常,是可以不捕获的比如NullPonterException而DataAccessException就是RuntimeExcption的子类,也就是运行时异常!解决方案三:图2中调用的就是图1的fl

BHO的Navigate2方法抛出UnauthorizedAccessException异常,百思不解,求能人指点!

问题描述 我用C#写了一个BHO,在SetSite()中获取IE浏览器的WebBrowser对象,通过其BeforeNavigate2事件截获浏览器提交的请求,将其Cancel掉,修改后再发出,在大部分网站上工作正常,但是访问个别页面内的frame时会抛出UnauthorizedAccessException异常(拒绝访问.异常来自HRESULT:0x80070005E_ACCESSDENIED),百思不解,不知有没有能人能帮忙,谢谢!核心代码(代码里其实未对截获的数据作任何修改,只是原样转发出

【Java】ArrayList 的 toArray() 方法抛出 ClassCastException 异常

第一次用这个方法,结果冒出个莫名其妙的异常来: String[] names = (String[]) mTags.toArray(); 结果会抛出 java.lang.ClassCastException 异常信息 网上谷歌了一下,发现这个 toArray 的正确用法应该是这样子才对: Object[] names = list.toArray(); for (int i = 0; i < names.length; i++) { String name = (String) names[i]

java中重写方法必须抛出和原方法一样的异常或者不抛异常

class A {     public void method throws IOException(){} } // 错误 class B {     public void method throws FileNotFoundException(){} } // 错误 class C {     public void method throws Exception(){} } // 错误 class D {     public void method throws IOExceptio

子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类

Overload译为重载:Override译为重写或者覆盖:  Overload讨论: Java中同一个类不可以有两个相同的方法(方法名.参数类型.参数个数和参数位置都  相同).但可以有方法名相同,参数不同(参数类型.参数个数和参数位置不相同)的方法.这  种相同的方法名,参数不同的方法称为重载. public class Test { public void fn(String name) {} public void fn(int age) {} public void fn(String

jsp 不能抛出checked异常时 处理方法

因此必须预先处理异常,另外,可以将异常转换为运行时异常,或者绕过它而不处理它.但是,应该这样做吗,这其中是否隐藏着错误? 问题 只要看一个例子,问题就清楚了.假设有一个File对象的List,需要按它们的标准路径以字典顺序排序.所谓标准路径,是指在解析别名.符号链接和/../及/./之后得到的完整绝对路径.本地方法使用一个比较器,如清单1所示: 1.清单1.按标准路径比较两个文件 2.importjava.io.File; 3.importjava.io.IOException; 4.impor

SRVE0068E: 未捕获到 servlet CXFServlet 的其中一个服务方法中抛出的异常。抛出的异常:java.lang.IncompatibleClassChangeError

问题描述 RT.[08-10-2516:37:40:421CST]00000030ServletWrappeESRVE0068E:未捕获到servletCXFServlet的其中一个服务方法中抛出的异常.抛出的异常:java.lang.IncompatibleClassChangeErroratorg.apache.cxf.wsdl11.ServiceWSDLBuilder.addExtensibiltyElements(ServiceWSDLBuilder.java:227)atorg.apa

vs2012-VS2012 装完插件后出的问题:遇到异常,可能是某个拓展导致

问题描述 VS2012 装完插件后出的问题:遇到异常,可能是某个拓展导致 585 ERROR System.InvalidCastException: 无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类型"Microsoft.VisualStudio.Editor.Implementation.IVsTextStreamEvents_Private".此操作失败的原因是对 IID 为"{96FC7D44-BCDD-4F00

onmeasure-andorid 自定义view重写了onMeasure方法后怎么控件不显示了

问题描述 andorid 自定义view重写了onMeasure方法后怎么控件不显示了 就是一个简单的自定义view,想要通过传入一个简单的自定义类,根据这个类的大小自确定view自己的大小,可是不重写onMeasure的时候还会显示出来,重写了就什么都没有了,但是点击位置还是会触发这个自定义view的事件 这是重写的方法 // view的大小由note的大小决定 @Override protected void onMeasure(int widthMeasureSpec int height