认识java中方法的重写和重载
2017-03-05 19:01
246 查看
在网上看到一道面试题如下
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。
一开始还真有点迷糊,只明白考的是重写与重载这个知识点。百度一下,结合自己的理解总结如下:
编译器对方法的标识是靠方法名(方法的签名)和参数列表来确定的。显然我们就可以对在类中定义具有相同签名的方法,只需使参数列表不同即可,这就是所谓的重载。重载只是创建了一个另一个方法而已,没有什么特别的,唯一就是取了跟其他方法相同的名字而已。
重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化。这也是java实现多态性机制。java也定义了一些规则来约束重写机制:
(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。ps:这是必须的,不然就是方法重载了。。
(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。
(3)只有实例方法才能被重写,超类中的final方法不能被重写。
(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。
(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。
(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。
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。
一开始还真有点迷糊,只明白考的是重写与重载这个知识点。百度一下,结合自己的理解总结如下:
编译器对方法的标识是靠方法名(方法的签名)和参数列表来确定的。显然我们就可以对在类中定义具有相同签名的方法,只需使参数列表不同即可,这就是所谓的重载。重载只是创建了一个另一个方法而已,没有什么特别的,唯一就是取了跟其他方法相同的名字而已。
重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化。这也是java实现多态性机制。java也定义了一些规则来约束重写机制:
(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。ps:这是必须的,不然就是方法重载了。。
(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。
(3)只有实例方法才能被重写,超类中的final方法不能被重写。
(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。
(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。
(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。
相关文章推荐
- java初学者实践教程15-方法的重载与重写
- java--方法的重载与重写
- JAVA方法重载和方法重写
- java中方法的重载与重写的区别
- 一个初学者对虚方法、重写、重载的认识
- java方法的重载(Overload)与重写(Override)
- java方法重写与重载
- java学习中重写与重载方法的区别(转自:小鸟的天空)
- Java 方法的重写与重载
- java中方法的重载与重写的区别
- 全新java初学者实践教程15(java SE5.0版)--jdk5中方法的重载与重写
- Java中的重载方法与重写
- java方法的重载,重写,super,this,final关键字
- JAVA 方法重载,方法重写,继承
- java中方法的重载与重写的区别
- java学习笔记九——构造函数、方法重写、重载
- My_Java之笔记(5)- 方法的重载与重写
- 黑马程序员-----java基础五(方法的重载与重写)
- Java里方法的重载与重写
- java初学者实践教程15-方法的重载与重写