父类方法有异常抛出时,子类方法重写异常规则

  • 子类方法声明抛出的异常应比父类方法声明抛出的异常类更小或相等(甚至不抛出)

class Fahter{
	
	public void method() throws RuntimeException  { }
}

// 三种情况
class Son extends Fahter{
	
	// public void method() { } // 不抛出异常
	
	// public void method() throws RuntimeException { } // 抛出与父类方法相同的异常
	
	public void method() throws ArrayIndexOutOfBoundsException { } // 抛出父类方法异常的子集
}

父类的方法没有声明任何异常时 ,子类方法重写可以抛出异常吗

  • 可以,但子类重写方法时只能声明抛出任何非受检异常RuntimeException
class Animal{
	
	public void cry() { } // 不抛出任何异常
}

class Dog extends Animal{
	
	// public void cry() { } // 不抛出异常
	
	// public void cry() throws RuntimeException { } // 可抛出运行时异常
	
	// public void cry() throws ClassNotLoadedException { } // 编译报错 不能抛出受检异常
	
	// public void cry() throws Exception{ } // 编译报错 Exception包含受检异常
	
}

11-07 08:57