java 重写、重载以及多态
2017-05-17 23:07
267 查看
重写
定义:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!规则
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造方法不能被重写。
如果不能继承一个方法,则不能重写这个方法。
重载
定义:重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。规则
被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
多态
描述:使用父类(接口)指向子类(实现),在运行时才能确定指向的对象,从而调用子类的方法进行执行。专业定义:指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
实现条件 : Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
实现形式
基于继承实现的多态
基于接口实现的多态
重要的特性
在继承链中对象方法的调用存在一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法,但是它仍然要根据继承链中方法调用的优先级来确认方法,该优先级为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
具体例子详见参考文献中的第二篇。
参考文献
http://www.runoob.com/java/java-override-overload.htmlhttp://www.cnblogs.com/chenssy/p/3372798.html
相关文章推荐
- [Java]重载,重写以及继承,多态的区别
- java的多态以及重载,重写,前期绑定,后期绑定
- java中的继承和多态以及重载和重写
- Java基础温习 (6)重载,重写以及继承,多态的区别
- java的重写、重载以及继承、多态和封装
- [Java]重载,重写以及继承,多态的区别
- java中重载与重写的区别以及与多态的关系
- java中的继承和多态以及重载和重写
- [Java]重载,重写以及继承,多态的区别
- JAVA面试题解惑系列(九)——继承、多态、重载和重写
- java方法的重载、覆盖和隐藏,以及多态的区别
- JAVA面试题解惑系列(九)——继承、多态、重载和重写
- 如何理解java中重写,重载与多态(整理)
- java笔记之封装、继承、重写、多态以及类型转换
- 【转】JAVA面试题解惑系列(九)——继承、多态、重载和重写
- JAVA面试题解惑系列(九)——继承、多态、重载和重写
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- java 继承 多态(override->重写(=覆盖)、overload->重载、polymorphism -> 多态)
- java笔记之封装、继承、重写、多态以及类型转换
- JAVA面试题解惑系列(九)——继承、多态、重载和重写