认识java中方法的重写和重载

在网上看到一道面试题如下

public class Parent {

    public int addValue( int a, int b) {
        int s;
        s = a+b;
        return s;
    }
}
class Child extends Parent {

}

Which methods can be added into class Child?
A. int addValue( int a, int b ){// do something…}
B. public void addValue (){// do something…}
C. public int addValue( int a ){// do something…}
D. public int addValue( int a, int b )throws MyException {//do something…}

答案是B,C。

一开始还真有点迷糊,只明白考的是重写与重载这个知识点。百度一下,结合自己的理解总结如下:

  1. 编译器对方法的标识是靠方法名(方法的签名)和参数列表来确定的。显然我们就可以对在类中定义具有相同签名的方法,只需使参数列表不同即可,这就是所谓的重载。重载只是创建了一个另一个方法而已,没有什么特别的,唯一就是取了跟其他方法相同的名字而已。

  2. 重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化。这也是java实现多态性机制。java也定义了一些规则来约束重写机制:
    (1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。ps:这是必须的,不然就是方法重载了。。
    (2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。
    (3)只有实例方法才能被重写,超类中的final方法不能被重写。
    (4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。
    (5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。
    (6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值