重写与重载总结

 

原文:http://yang7551735.javaeye.com/blog/482535  

方法的重写和重载并不难,但是有些地方还是值得注意一下,特别是下文提到的重写规则的第二条和重载规则的第一条,在java认证考试和一些面试题中经常会考到。


方法的重写规则:


重写方法的规则如下:


1. 参数列表:必须与被重写方法的参数列表完全匹配。 
2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同 
3. 访问级别:一定不能比被重写方法强,可以比被重写方法的弱。 
4. 非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常。 
5. 检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常 
6. 不能重写标志为final,static的方法 

重载方法的规则: 
1. 参数列表:被重载的方法必须改变参数列表。 
2. 返回类型:可以改变返回类型。 
3. 修饰符:可以改变修饰符 
4. 异常:可以声明新的或者更广泛的异常。 

通过实例充分理解重写与重载:

 

  1. class Animal {  
  2.     public void eat(){  
  3.     }  
  4. }  

 以下列出对于Animal的eat方法各种重写重载实例,根据以上列出的规则,判断其是否合法(以下的方法都属于Animal的子类Horse的方法):
1. private void eat(){}  不能通过编译,非法重写,访问修饰符限制性变强;不属于重载,因为参数列表没有发生改变
2. public void eat() throw RuntimeException{}  能通过编译,属于重写,重写方法可以抛出任何非检查异常。
3. public void eat() throw IOException{}  不能通过编译,非法重写,重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常;不属于重载,参数列表必须发生变化才属于重载
4. public void eat(String food){}  能通过编译,不是重写;合法重载,因为参数列表发生改变了。
5. public String eat(){}  不能通过编译,不是重写,因为其返回类型;不是重载,因为参数列表没有发生改变。
6. public String eat(int n){} 可以通过编译,不是重写;是重载,首先参数列表必须发生变化,返回类型可以发生改变。

 

对父类被重写的方法做一个变动:

 

  1. class Animal {  
  2.     public Animal eat() throws IOException{  
  3.         return null;  
  4.     }  
  5. }  

7.  public Animal eat(){return null;}  可以通过编译,合法重写,可以不抛出异常,只要不抛出新的异常或更广泛的异常就可以。
8.  public Animal eat() throws FileNotFoundException{return null;} 可以通过编译,是重写,属于子类的非检查异常。
9.  public Animal eat() throws Exception{}  不可以通过编译,非法重写,抛出了更广泛的异常。
10.  public Horse eat() {} 可以通过编译,是重写,因为返回类型可以是被重写的返回类型的子类。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值