黑马程序员技术交流社区

标题: 异常代码运行错误 [打印本页]

作者: 李节起    时间: 2012-4-8 23:55
标题: 异常代码运行错误

代码1:
import java.io.*;
class Fu
{
    public void myVoid() throws IOException
    {
         System.out.println("父类");
    }
}
public class LianXil extends Fu
{
    public void myVoid() throws Exception
    {
         System.out.println("子类");
    }
    public static void main(String args[])
    {
    }
}
代码2:
import java.io.*;
class Fu
{
    public void myVoid() throws IOException
    {
         System.out.println("父类");
    }
}
public class LianXil extends Fu
{
    public void myVoid(String s) throws Exception
    {
         System.out.println("子类");
    }
    public static void main(String args[])
    {
    }
}
代码1运行的时候出错,
说是子类重写了父类的myVoid方法,父类抛出异常IOException而子类抛出异常Exception,
是 违反重写规则。所以出错。
但是  代码2  我觉得跟代码1 应该是一样的啊,为什么代码2能正常运行?
作者: 张卯    时间: 2012-4-9 00:01
本帖最后由 张卯 于 2012-4-9 00:02 编辑

代码2的myVoid()有参数,没有复写父类的方法。
关于异常,是因为子类异常不能大于父类异常。
作者: 申振华    时间: 2012-4-9 00:54
本帖最后由 申振华 于 2012-4-9 00:55 编辑

首先覆写给予在继承和接口的实现上,被覆写的方法必须是abstract,而且被覆写的方法不能比要覆写的方法有跟严格的权限,方法名和参数相同。
继承就是子类拿到了操作父类的操控权限。
代码1:
父类中: public void myVoid() throws IOException //不是抽象方法,所以子类在继承时不能覆写此方法
子类:public void myVoid() throws Exception  //子类覆写了父类中的非抽象方法,所以报错了

代码2:
父类:  public void myVoid() throws IOException
子类: public void myVoid(String s) throws Exception
由上可以看出是两个类中独立的方法。所以没有报错
作者: 莫运飞    时间: 2012-4-9 02:06
import java.io.*;
class Fu
{
    public void myVoid() throws Exception
    {
         System.out.println("父类");
    }
}
class LianXil extends Fu
{
    public void myVoid() throws IOException    {
         System.out.println("子类");
    }
    public static void main(String args[])

    {

    }
}

你的异常抛错了 代码1 的子类异常大于了父类的异常 ,换回来就可以了。我编译 运行通过了的。
作者: pray    时间: 2014-4-26 06:55
在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这网上少有的帖子。但是我还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的!能够在如此精彩的帖子后面留下自己的网名是多么骄傲的一件事啊!楼主,请原谅我的自私!我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子的看下去!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2