黑马程序员技术交流社区
标题:
关于异常在子父类中的体现有个小问题
[打印本页]
作者:
宋美成
时间:
2014-4-28 15:21
标题:
关于异常在子父类中的体现有个小问题
第二遍扫盲,居然扫到了个知识点
毕老师说,如果父类和接口的方法中没有异常抛出,那么子类在覆盖该方法时也不可以抛出异常,如果子类方法发生了异常,就必须进行try处理,而不能抛。
关于这句话好有疑问,我编了个程序,发现了问题
问题:下面这段程序里,父类没有抛出异常,子类覆盖了方法仍然可以抛出异常啊,而且子类发生了异常,我也没有try,而是抛了啊,最后运行也是对的。求这句话的正确解释。
class FuShuException extends Exception //这里我们自定义了一个FuShuException异常,具体内容并没有写出来
{}
class wohao
{
public int show(int a)
{
return a;
}
}
public class nihao extends wohao
{
public static void main(String[] args)throws FuShuException
{
wohao d= new wohao();
int x=d.show(-4);
if (x<0)
throw new FuShuException();
System.out.println(x);
}
}
复制代码
作者:
谢振宣
时间:
2014-4-28 17:12
/*
class FuShuException extends Exception //这里我们自定义了一个FuShuException异常,具体内容并没有写出来
{}
class wohao
{
public int show(int a)
{
return a;
}
}
public class nihao extends wohao
{
public static void main(String[] args)throws FuShuException
{
wohao d= new wohao();//此处创建的是父类的对象,必调用父类的show方法,与其子类没有关系
int x=d.show(-4);
if (x<0)
throw new FuShuException();//此处异常是在show方法调用之后抛出的
System.out.println(x); //其作用是判断show的结果,若结果x<0,则抛出异常。与show的调用没有关系。
}
}
*/
//若要实现在父类的show方法中,必须要声明异常,可以用下面的方法。
class FuShuException extends Exception
{}
class WoHao//类名的定义规范是所有单词的首字母都要大写
{
public int show(int a)throws FuShuException//此处必须要声明异常,否则编译不能通过
{
if (a<0)
throw new FuShuException();//在此处判断并抛出异常,show方法就必须要声明异常
return a;
}
}
public class NiHao extends WoHao
{
public static void main(String[] args)
{
WoHao d= new WoHao();
try
{
int x=d.show(-4);
System.out.println(x);
}
catch(FuShuException e)//此处处理异常
{
System.out.println("传入了负值.");
}
}
}
复制代码
作者:
宋美成
时间:
2014-4-28 17:28
谢振宣 发表于 2014-4-28 17:12
谢谢了,我大概理解了,我把原来的覆盖理解成了调用,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2