异常在子父类覆盖中的体现
1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。
class AException extends Exception
{
}
class BException extends AException
{
}
class CException extends Exception
{
}
/*
Exception
|--AException
|--BException
|--CException
*/
class Fu
{
void show()throws AException
{
}
}
class Test
{
void function(Fu f)
{
try
{
f.show();
}
catch (AException e)
{
}
}
}
class Zi extends Fu
{
void show()throws CException//子类只能抛出父类定义的异常,在这里编译不能通过
{
}
}
class
{
public static void main(String[] args)
{
Test t = new Test();
t.function(new Zi());
}
}
异常:练习
/*有一个圆形和长方形。
都可以获取面积。对于面积如果出现非法的数值,视为是获取面积出现问题。
问题通过异常来表示。
现有对这个程序进行基本设计。*/
package tan.tian;
//自定义异常信息:非法值异常
class InvalidValueException extends RuntimeException{
public InvalidValueException(String msg) {
super(msg);
}
}
interface Shape{
void getArea();
}
class Rec implements Shape{
private int len,wid;
public Rec(int len,int wid) {
this.len=len;
this.wid=wid;
}
@Override
public void getArea() {
if(len<=0||wid<=0) {
throw new InvalidValueException("边长出现非法值!");
}
System.out.println(len*wid);
}
}
class Circle implements Shape{
public final static double PI=3.14;
int radius;
public Circle(int radius) {
if(radius<=0){
throw new InvalidValueException("圆的的半径为非法数值");
}
this.radius=radius;
}
@Override
public void getArea() {
System.out.println(radius*radius*PI);
}
}
public class ExceptionTest1 {
public static void main(String[] args) {
Rec r=new Rec(4, 5);
r.getArea();
Circle c=new Circle(-2);
c.getArea();
}
}