重载(Overload)和重写(Overide)
重载(Overload)
重载是在同一个类中对已有方法的再次编程,它的目的是在使用时能适应更多情况。
这里拿构造函数举例理解:
public class IdCard {public String name;public int age;public String sex;public String address;//一个形参public IdCard(String name){this.name = name;age = 0;sex = null;address = null;}//两个形参public IdCard(String name, int age){this.name = name;this.age = age;sex = null;address = null;}//三个形参public IdCard(String name, int age, String sex){this.name = name;this.age = age;this.sex = sex;this.address = null;}//四个形参public IdCard(String name, int age, String sex, String address){this.name = name;this.age = age;this.sex = sex;this.address = address;}
}
可以看到代码中同名构造函数有四个(其实系统还默认添加了一个无参构造函数),区别在于每一个构造函数中的形参数量不同,这种做法就是重载(Overload),这让这个类的使用者在使用的时候更加自由,不必局限于有限的信息,而且不用更换函数名。
public class Main {public static void main(String[] args) {IdCard a = new IdCard("孙行者");IdCard b = new IdCard("者行孙",500);IdCard c = new IdCard("行者孙",500,"无");IdCard d = new IdCard("孙悟空", 500,"无", "花果山水帘洞");}
}
重载的规则:
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
重写(Override)
重写的发生前提是两个类发生了 “继承(extends)” 关系,就是要至少有一个类还有一个继承该类的子类,而且要重写的方法(或字段)在父类中已经存在了(重写,重写,顾名思义就是将已经存在的方法重写一遍),重写(Override)这个操作很好的体现了Java化繁为简的特性,对于有一些具有普遍性的方法,可以先在父类中写出这个方法的雏形,然后根据这个父类的子类们可能各不相同的具体需要,在子类中将这个原始的方法进行拓展甚至完全的重新实现。
//这是一个 “人类” 父类类
public class Person {public String name;public int age;public void behavior(){System.out.println("吃饭,睡觉,打豆豆。");}
}
这是一个父类,他里面的成员变量是一个人类的基本信息,方法behavior() 中呈现的也是一个人类的基本行为,这些东西是所有人类都具备的,最原始的。
下面看几个该父类的子类:
//这是一个 “医生” 子类,继承自 “人类” 类
public class Doctor extends Person{public void Behavior(){//super + " . " 可以调用父类的方法super.behavior();System.out.println("治病救人为本职");}
}
可以看到,这个类中对父类的 behavior() 方法进行了重写,他在原来人类原始能力的基础上(),加入了作为医生的能力。
重载的规则:
- 参数列表与被重写方法的参数列表必须完全相同。
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
- 声明为 final 的方法不能被重写。
- 声明为 static 的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
以上就是我对重写(Override)和重载(Overload)的简单理解,如果各位看官发现有错误的地方,希望能告诉我。
重载(Overload)和重写(Overide)相关推荐
- c语言 方法重载 冲定义,C++ 重载(overload)、重写(overrride)、重定义(redefine)
今天参加了一个面试,问到了上面的C++知识点,都知道,时间久了难免遗忘,感觉回答的一般,不够专业,部分点还答错了,sigh!在此再补漏下. 注意:这些都是C++语言的特性,C语言连最简单的重载(ove ...
- C++ 重载(overload)、重写(overrride)、重定义(redefine)总结
昨晚打开论坛,看到有朋友问了一个关于虚函数的问题,因为头太疼了,所以今天中午起床再看. 问题传送门:http://www.cppleyuan.com/viewthread.php?tid=7923 C ...
- 重载Overload 和重写Override区别
重载Overload 和重写Override区别 一.含义 二.代码 1.重载OverLoad 2.重写Override 一.含义 重载OverLoad:表示同一个类中的可以有多个方法名称相同的方法, ...
- Java中方法的重载(overload)与重写/覆写(override)
重载-Overload 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系.同时,重载可以发生在同一个 ...
- C++重载(overload)、重写(overwrite,也称隐藏)、覆盖(override)
一.重载(overload) 函数名相同,但是它的参数列表中参数的个数.类型或顺序不同.不能靠返回类型来判断.这个最简单,name mangling. (1)函数重载只会发生在同一个作用域中: (2) ...
- 覆盖(override)和重载(overload)
覆盖(override)重写和 重载(overload) 继承,重写--->多态 我懂了,你懂吗 ,不看看文章 java 子类重写父类的方法应注意的问题 Java多态性理解 转载于:http ...
- Java 重写(Override)与重载(Overload)
TestDog.java /* * 重写(Override) * 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! * 重写的好处在于子类 ...
- java override overwrite,重写(overwrite)、重载(overload)和覆盖(override)
覆盖(override):子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖.废弃父方法 1.覆盖的方法的标志必须要和 ...
- Java面向对象---重写(Override)与重载(Overload)
一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说 ...
最新文章
- java 模拟get登录_java 模拟get请求
- jQuery.append()、jQuery.html()存在的XSS漏洞
- 金融数据分析(四)-------矩,偏度,峰度
- Java 并发编程73道面试题及答案 ——面试看这篇就够了!
- KN-S1008S1016S1024S1024F端口状态指示
- CWnd与HWND的区别与转换
- OpenCV计算机视觉实战(Python版)_005图像的梯度处理
- leetcode python3 简单题118. Pascal's Triangle
- Android科大讯飞语音识别源码及API下载
- 【android自定义控件】LinearLayout定义ActionBar样式
- 创新检查技术,赋能保密监管 ,您需要一款这样的数据库内容保密检查系统!
- matlab怎么fprintf,matlab中的fprintf函数怎么用
- 如何修改计算机无线mac地址,如何修改无线网卡物理地址,求指教
- 小体积智能直流无刷伺服电机驱动控制器TMCM
- jca 实例 java_jca工具分析was的javacore实例解析
- 计算机房间的英语,酒店客房状态常用英语
- Hexo个人博客NexT主题添加Local Search本地搜索
- 如何学习3dsmax?3dsmax教程 中英文版本
- 立可得_第2章_新零售_重构人、货、场
- 千牛如何撤销发往服务器的文件,千牛服务器没有返回数据
热门文章
- js 下的 split
- 亲,如果你笑了,记住给我留言!
- LUCK——组合数学
- Microsoft.NET多国语言资源解决方案
- Python_装饰器Decorator
- VUE系列-Vue中组件的应用(三)
- jQuery源码分析研究学习笔记-jQuery.clean()(七)
- TensorFlow2.0(四)--Keras构建深度神经网络(DNN)
- Tips--解决安装Multisim时出现No software will be installed or removed无法安装的问题
- 数据结构--直接插入排序