在声明已检查的Java中覆盖实例方法

时间:2015-06-04 05:53:44

标签: java override

请帮助我,我无法找出它没有被编译的原因!它抛出"必须被捕获或声明被抛出a.eat()"错误。 感谢。

class Animal
{
    public void eat() throws Exception
    {
        System.out.println("Baseclass eat()");
    }
}

class Dog extends Animal 
{
    public void eat() throws ArithmeticException
    {
        System.out.println("Subclass eat()");
    }
}

class eg4psp
{
    public static void main(String gg[])
    {

        try
        {
            Animal a = new Dog();
            Dog d = new Dog();
            a.eat();
            d.eat();
        }
        catch(ArithmeticException ae) 
        { 
        System.out.println(ae); 
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您正在调用a.eat(),因此就编译器而言,任何 Exception都可以抛出 - 它只关心编译时间类型a。 (a的值不是Dog的引用,Dog.eat只引用ArithmeticException

因此,在调用a.eat()的代码中,您必须声明 方法(main)抛出Exception,或者抓住它