Java 重写(Override)与重载(Overload)——面向对象
来源:互联网 发布:app客户端制作软件 编辑:程序博客网 时间:2024/05/01 05:55
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:
package pers.black.test.override;public class Employee { void doWork(){ System.out.println("do work"); }/** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 Employee Employee1=new Employee(); Employee Employee2=new Programer(); Programer Employee3=new Programer(); Employee1.doWork(); Employee2.doWork(); Employee3.doWork(); }}class Programer extends Employee{ void doWork(){ System.out.println("write code"); }}
编译阶段,只是检查参数的引用类型。
然而在运行时,Java虚拟机(JVM)指定对象的类型并且运行该对象的方法。
方法的重写规则
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造方法不能被重写。
如果不能继承一个方法,则不能重写这个方法。
Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。
package pers.black.test.override;public class Employee { void doWork(){ System.out.println("do work"); } void getCompanyName(){ System.out.println("ATL"); }/** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 Employee Employee1=new Employee(); Employee Employee2=new Programer(); Programer Employee3=new Programer(); Employee1.doWork(); Employee2.doWork(); Employee3.doWork(); Employee3.company(); }}class Programer extends Employee{ void doWork(){ System.out.println("write code"); } void company(){ super.getCompanyName(); }}
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只能重载构造函数
重载规则
被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
package pers.black.test.override;public class Employee { void doWork(){ System.out.println("do work"); } void getCompanyName(){ System.out.println("ATL"); }/** * @param args */ public static void main(String[] args) { // TODO 自动生成的方法存根 Employee Employee1=new Employee(); Employee Employee2=new Programer(); Programer Employee3=new Programer(); Employee1.doWork(); Employee2.doWork(); Employee3.doWork(); Employee3.company(); Employee3.doWork("MES System Project"); }}class Programer extends Employee{ void doWork(){ System.out.println("write code"); } void doWork(String project){ System.out.println("write code for "+project); } void company(){ super.getCompanyName(); }}
重点内容重写与重载之间的区别
区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)
总结
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。
- Java 重写(Override)与重载(Overload)——面向对象
- Java面向对象(二)重写(Override)与重载(Overload)
- 面向对象重写(override)与重载(overload)区别
- 面向对象中的重写(override)与重载(overload)
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- Java面向对象编程之重载(overload)和重写(override)
- 黑马程序员—JAVA重载Overload与重写Override
- Java的重载(Overload)与重写(Override)
- Java 重写(Override)与重载(Overload)
- Java 重写(Override)与重载(Overload)
- Java 重写(Override)与重载(Overload)
- Java 重写(Override)与重载(Overload)
- Java区分---OverLoad重载与Override重写
- Java 重写(Override)与重载(Overload)
- Java 重写(Override)与重载(Overload)
- C#前台js调用后台代码
- 网站添加天气预报功能
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
- 服务器开发之junit多线程测试
- js三级联动
- Java 重写(Override)与重载(Overload)——面向对象
- 用PHP 去掉所有html标签里的部分属性
- 修改chrome的安装目录(默认的竟然安装在documents and settings目录,google真不厚道)
- PHP+Ajax+Mysql联合实现省市区三级联动
- BE插件开发获取当前单据状态枚举
- 2012年流行的安卓手机浏览器
- java collection map遍历效率问题
- Android5.1-s5p6818平台Android.mk文件引入so动态库问题
- 命名污染