在继承中使用异常

shi*_*ome 1 java

class B {
    void process()throws Exception{
        System.out.println("hi sh");
    }

}
class C extends B {
    void process(){
        System.out.println("hhhhhh");
    }

    public static void main(String args[]){
        B a=new C();
        try{
             a.process();
        }
        catch(Exception e)
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在调用process方法时,我们必须使用try catch块.但是,如果我只将C的对象存储在C的引用变量中,C a=new C()那么就不需要尝试catch块.

谁能告诉我原因?

aio*_*obe 5

编译器不能(通常)告诉变量a在运行时将具有哪种类型.因此,(总是)主罚安全路线,并要求你把try/ catch呼叫周围.

当你这样做

C a = new C();
Run Code Online (Sandbox Code Playgroud)

相反,编译器可以确保B.process()不会在运行时调用,这样你可以调用它,而不try/ catch.