51,407
社区成员
发帖
与我相关
我的任务
分享
public class Test {
static class A {
public void method() throws Exception {
System.out.println("A");
}
}
static class B extends A {
@Override
public void method() {
System.out.println("B");
}
}
public static void main(String[] args) {
A a = new A();
A b = new B();
B c = new B();
//为什么改变了引用的类型,catch的Exception也会跟着改变
//输出任然为B,说明调用的是B.method,但是B.method并没有抛出异常
//这里捕获了A.method的异常,这是为什么
try {
b.method();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//这个地方不需要捕获异常,
c.method();
}
}
A b = new B();
在这个过程中你定义的b其实是A类,它算作A,所以会抛出父类异常,而不是子类异常。
public class Test {
static class A {
public void method() throws Exception {
System.out.println("A");
}
}
static class B extends A {
@Override
public void method() {
System.out.println("B");
}
public void onlyInB() {
System.out.println("onlyInB");
}
}
public static void main(String[] args) {
A obj = new B();
obj.onlyInB(); // 这行代码是会报错的
}
}