当前位置:编程学习 > JAVA >>

方法覆盖和异常

方法覆盖要注意两点:

n 访问权限不能比父类的弱

n 抛出的异常不能比父类的多。(注意多并不是数量上的多,而是父类方法抛出的异常必须包含子类覆盖方法抛出的异常)

请看下例:

[java]
class TestMyException2 { 
    public static void main(String[] args) { 
        ABC abc = new ABD(); 
        try { 
            abc.a(5); 
        } catch (EA e) { 
            e.test(); 
        } 
    } 

 
class EA extends Exception // 创建自己的编译时异常  

    String s; 
 
    public EA(String s) { 
        this.s = s; 
    } 
 
    public EA() { 
    } 
 
    public void test() { 
        System.out.println(s); 
    } 
}; 
 
class EA1 extends EA // 创建自己的异常的子异常  

    public EA1(String s) { 
        super(s); 
    } 
}; 
 
class EA2 extends EA // 创建自己的异常的子异常  

    public EA2(String s) { 
        super(s); 
    } 
}; 
 
class ABC { 
    public void a(int i) throws EA { 
        if (i < 0) 
            System.out.println("normal"); 
        else 
            throw new EA("no normal"); 
    } 
}; 
 
class ABD extends ABC { 
    public void a(int i) throws EA1, EA2 // 虽然抛出的异常比父类多,但是都是父类异常的子类  
    { 
        if (i < 0) 
            System.out.println("dfsdafds"); 
        else if (i == 0) 
            throw new EA1("参数 == 0"); 
        else 
            throw new EA2("参数 > 0"); 
    } 
}; 
class TestMyException2 {
 public static void main(String[] args) {
  ABC abc = new ABD();
  try {
   abc.a(5);
  } catch (EA e) {
   e.test();
  }
 }
}

class EA extends Exception // 创建自己的编译时异常
{
 String s;

 public EA(String s) {
  this.s = s;
 }

 public EA() {
 }

 public void test() {
  System.out.println(s);
 }
};

class EA1 extends EA // 创建自己的异常的子异常
{
 public EA1(String s) {
  super(s);
 }
};

class EA2 extends EA // 创建自己的异常的子异常
{
 public EA2(String s) {
  super(s);
 }
};

class ABC {
 public void a(int i) throws EA {
  if (i < 0)
   System.out.println("normal");
  else
   throw new EA("no normal");
 }
};

class ABD extends ABC {
 public void a(int i) throws EA1, EA2 // 虽然抛出的异常比父类多,但是都是父类异常的子类
 {
  if (i < 0)
   System.out.println("dfsdafds");
  else if (i == 0)
   throw new EA1("参数 == 0");
  else
   throw new EA2("参数 > 0");
 }
};

运行结果为:

参数 > 0

 

摘自  qq1712088151
 
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,