A:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
package cn.itcast_01;
import java.sql.SQLException;
public class Demo {
public static void main(String[] args) {
}
}
class Fu{
public void show() throws Exception {
}
}
class Zi extends Fu{
//SQLException是Exception子类
@Override
public void show() throws SQLException {
}
}
反例
B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
package cn.itcast_01;
import java.io.IOException;
import javax.net.ssl.SSLException;
public class Demo {
public static void main(String[] args) {
}
}
class Fu{
public void show() throws IOException {
}
}
class Zi extends Fu{
//SSLException是IOException的子类
@Override
public void show() throws SSLException {
}
}
反例
C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
package cn.itcast_01;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.net.ssl.SSLException;
public class Demo {
public static void main(String[] args) {
}
}
class Fu{
public void show() throws IOException {
}
}
class Zi extends Fu{
@Override
public void show() throws SSLException {
String s = "2014-12-6";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(s);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
反例
其实只要简单的记住一句话
父类抛出的异常,子类可以抛出相同的父异常或者父异常的子类。否者子类只能用try...catch...finally...或者其变式来捕获