override和重载的区别overload的区别

1300人阅读
Java(48)
  重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现。 override从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。overload它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。
2、override(重写,覆盖)
(1)方法名、参数、返回值相同。
(2)子类方法不能缩小父类方法的访问权限。
(3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
(4)存在于父类和子类之间。
(5)方法被定义为final不能被重写。
(6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
3、overload(重载,过载)
(1)参数类型、个数、顺序至少有一个不相同。
(2)不能重载只有返回值不同的方法名。
(3)针对于一个类而言。
(4)不能通过访问权限、返回类型、抛出的异常进行重载;
(5)方法的异常类型和数目不会对重载造成影响;
4、override应用:
(1)最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。
(2)除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
  override是在不同类之间的行为,overload是在同一个类中的行为。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:89180次
积分:2627
积分:2627
排名:第13768名
原创:179篇
转载:12篇
评论:13条
(5)(6)(15)(19)(5)(5)(7)(17)(27)(29)(29)(27)C++中overload,override,overwrite的区别详细解析
字体:[ ] 类型:转载 时间:
以下是对C++中overload,override,overwrite的区别进行了详细的分析介绍,需要的朋友可以过来参考下
Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。
Override(覆盖):是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。
Overwrite(重写):是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
简述override和overload的区别
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
您好,提问者:
还是以代码的例子看一下区别吧。1.重载的概念:----->在同一个类中,允许存在同名函数,但它们的参数个数或者参数类型不同即可。public static void main(String[] args){System.out.println(add(1,2));System.out.println(add(1.11,2.22));}//返回一个int类型相加的和public static int add(int a, int b){return a +}//返回一个double类型想加的和public static double add(double a, double b){return a +} 重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
重写就是子类重写了父类的方法。比如:class Fu{
int num = 3;}class Zi extends Fu{
int num = 5;}这时候Zi类继承了Fu类,也拥有了num,这时候输出num,JVM(虚拟机)会先去Fu类中查找,输出Fu类中的num,但是Zi类有num,所有在运行Zi类的时候重写了num的值,输出5
为您推荐:
扫描下载二维码C#中override和overload的区别_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#中override和overload的区别
&&C#中override和overload的区别
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢overload与override的区别
overload与override的区别:
java多态之Override :
Override(重写)是子类与父类的一种多态性体现。
Override允许子类改变父类的一些行为。
为什么需要Override:当父类不满足子类的一些要求时我们就需要子类对父类的一些行为进行重写。
例如:某公司里的员工的电话号码不允许对外公开,而销售人员(员工)的电话号码则需要对外公开。
这时我们就可以这样做:
1.public class Employee {&&
3.&&& private S&&
5.&&& public Employee(String mobile) {&&
6.&&&&&&& this.mobile =&&
9.&&& protected String showMess(){&&
10.&&&&&&& return &电话号码:&+&&
11.&&& }&&
public class Employee {
&&&&&&& private S
&&&&&&& public Employee(String mobile) {
&&&&&&&&&&&&&&& this.mobile =
&&&&&&& protected String showMess(){
&&&&&&&&&&&&&&& return &电话号码:&+
员工类的showMess方法是protected的,所以位于其他包的对象是访问不到的。
然后定义一个销售人员的类(Sales),并继承Employee类
1.public class Sales extends Employee{&&
3.&&&&&&& //子类除了具有父类的一些属性,也可以有自己的一些属性&&
4.&&& private S&&
6.&&& public Sales(String mobile,String msn) {&&
7.&&&&&&& super(mobile);&&
8.&&&&&&& this.msn =&&
11.&&& @Override&
12.&&& public String showMess() {&&
13.&&&&&&& return super.showMess()+&==msn:&+this.&&
14.&&& }&&
public class Sales extends Employee{
&&&&&&& //子类除了具有父类的一些属性,也可以有自己的一些属性
&&&&&&& private S
&&&&&&& public Sales(String mobile,String msn) {
&&&&&&&&&&&&&&& super(mobile);
&&&&&&&&&&&&&&& this.msn =
&&&&&&& @Override
&&&&&&& public String showMess() {
&&&&&&&&&&&&&&& return super.showMess()+&==msn:&+this.
注意这时被覆盖的showMess方法的访问级别是public,可以被任何其他对象访问到。
关于Override有几点要注意的地方:
1.被覆盖方法的访问控制级别可以不一样。
例如上例父类的showMess方法的访问级别为protected的,而子类覆盖的showMess方法访问级别则为public的。
但子类的访问级别必须要高于父类被覆盖方法的访问级别,如果父类是public的而子类是protected的则是错误的。
2.方法被定义为private或static或final的则不能被覆盖。
3.方法的返回类型:子类的返回类型可以是更具体的对象,例如可以将Employee类的返回类型改为Object也正确。而倒过来则错误。
4.在方法调用时先会在子类中找覆盖的方法,如果子类中没有则会在父类中去找。
1.public class Parent {&&
3.&&& private int num(int i,int j){&&
4.&&&&&&& return i+j;&&
7.&&& public static void main(String[] args) {&&
8.&&&&&&& Parent p = new Child();&&
9.&&&&&&& System.out.println(p.num(1, 2));&&
10.&&& }&&
12.class Child extends Parent{&&
14.&&& public int num(int x,int y){&&
15.&&&&&&& return x-y;&&
16.&&& }&&
public class Parent {
&&&&&&& private int num(int i,int j){
&&&&&&&&&&&&&&& return i+j;
&&&&&&& public static void main(String[] args) {
&&&&&&&&&&&&&&& Parent p = new Child();
&&&&&&&&&&&&&&& System.out.println(p.num(1, 2));
class Child extends Parent{
&&&&&&& public int num(int x,int y){
&&&&&&&&&&&&&&& return x-y;
这段代码的执行结果为什么呢?如果你回答-1则错了,正确答案是3。
为什么呢?因为父类的num方法是private的,所以不能被覆盖,所以子类的num方法不是一种Override,因此在子类找不到被覆盖的num方法就会执行父类的num方法。所以结果输出为3.
1.public class Parent {&&
3.&&& public int test(){&&
4.&&&&&&&&&&&&&&& //执行子类的num方法&&
5.&&&&&&& return num(1,2);&&
8.&&& protected int num(int i,int j){&&
9.&&&&&&& return i+j;&&
10.&&& }&&
12.&&& public static void main(String[] args) {&&
13.&&&&&&& Parent p = new Child();&&
14.&&&&&&& System.out.println(p.test());&&
15.&&& }&&
18.class Child extends Parent{&&
20.&&& public int num(int x,int y){&&
21.&&&&&&& return x-y;&&
22.&&& }&&
public class Parent {
&&&&&&& public int test(){
&&&&&&&&&&&&&&& //执行子类的num方法
&&&&&&&&&&&&&&& return num(1,2);
&&&&&&& protected int num(int i,int j){
&&&&&&&&&&&&&&& return i+j;
&&&&&&& public static void main(String[] args) {
&&&&&&&&&&&&&&& Parent p = new Child();
&&&&&&&&&&&&&&& System.out.println(p.test());
class Child extends Parent{
&&&&&&& public int num(int x,int y){
&&&&&&&&&&&&&&& return x-y;
那么这段代码的执行结果是-1,因为父类test方法调用的是子类的num方法。
&java overload的原则 :
在java中overload要遵循两个原则:准确性和唯一性
public class TestOverLoad
public static void main(String[] args)
&& Test test = new Test();
&& test.print(null);&
class Test
public void print(String some)
&& System.out.println(&String version print&);
public void print(Object some)
&& System.out.println(&Object version print&);
在这个程序中,&& test.print(null)中的null即是String又是Object,那么要执行那个函数呢?结果是它执行了 public void print(String some),原因就是准确性原则,String继承自Object.在java看来,在这个例子中说null是String类型的比说null是Object类型的更为准确.
public class TestOverLoad
public static void main(String[] args)
&& Test test = new Test();
&& test.print(null);&
class Test
public void print(String some)
&& System.out.println(&String version print&);
public void print(Object some)
&& System.out.println(&Object version print&);
public void print(StringBuffer some)
&& System.out.println(&StringBuffer version print&);
在该例中,Test类多了一个函数,然而在编译时出现了错误.原因是该例违反了overload的唯一性原则
.String和StringBuffer之间不存在继承关系,因此不能说null属于它们两个中的那个类更准确,于是程序在执行时就会不知道该调用public void print(String some),还是该调用 public void print(StringBuffer some).

我要回帖

更多关于 int和integer的区别 的文章

 

随机推荐