一图区分方法重写与方法重载

原创 2018年04月14日 22:08:58

方法的重载与重写只有一字之差,而且都是类的多态的体现,初学很容易概念混淆。但稍加分析就能发现,他们看似相同,本质还是有很大差别的。

(一图区分重载与重写)

下面,我们来仔细看看两者的差异。


重载Overloading

概念:方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。

本质:方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是类中的多态性。

区分点:方法名相同,参数列表不同。对返回类型、访问权限没有要求

重载规则:

1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。例如,不同的参数类型,不同的参数个数,不同的参数顺序。当然,同一方法内的几个参数类型必须不一样,例如可以是 fun(int,float),但是不能为 fun(int,int)。
2.不能通过访问权限、返回类型、抛出的异常进行重载。
3.当Java调用一个重载方法时,参数与调用参数相匹配的方法被执行

 

重写Overriding

概念:所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。这样,就可以实现对父类方法的覆盖。

本质:在Java中,子类可以继承父类的所有的特征,包括父类的方法和属性。但当子类需要拓展新的功能时,就要对父类继承来的方法进行修改,这就是重写,体现的是父类与子类之间的多态。

区分点:方法名、参数列表、返回类型均相同,且子类访问权限>父类访问权限

重写规则:

1.父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
2.父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
3.被子类重写的方法不能拥有比父类方法更加严格的访问权限。

当子类重写了父类中的方法后,优先调用的是子类重写的方法。那么如果现在一定要调用父类中的方法该怎么办呢?此时,通过使用.. super关键就可以实现这个功能,super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。

 

练习:

下面哪些代码可放在Here处?

class Super{  

      protected float getNum(){return 3.0f;}

   }

  publicclass Sub extends Super{

       //Here

  }

     

a)   floatgetNum(){return 4.0f;} 

b)  publicvoid getNum(){} 

c)   privatevoid getNum(double d){}

d)  publicdouble Getnum(){return 4.0d;}

e)   publicfloat getNum(){return 9;}

 

分析:

a:× 修饰符protected>默认,所以不能重写

b:× 既不是重写,也不是重载,所以不能放

c: √ 方法名相同,参数不同,(不关心返回类型),是方法重载

d: √ 方法名都不相同,既不是重写也不是重载,是不相关的两个方法当然可以放

e: √  public > protected, 标准的重写

 

 

MFC浅析(7) CWnd类虚函数的调用时机、缺省实现

CWnd类虚函数的调用时机、缺省实现
  • FMD
  • FMD
  • 2001-06-16 13:12:00
  • 3084

方法重写和方法重载的区别

注:转载之>>>http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html java中重载与重写的区别 ...
  • b1198103958
  • b1198103958
  • 2015-06-15 21:35:57
  • 1413

方法重载与方法重写的概念和区别

方法重载:一个类中有一个方法A,你又在这个类中创建了一个方法B,方法B的名字和A一样,返回值类型也一样,但是参数的类型或个数不同,此时B重载了A。 例如: public class TestClass...
  • sx_ygl
  • sx_ygl
  • 2017-05-24 10:32:11
  • 2963

JAVA中的方法重写与方法重载区别

  • 2011年07月13日 17:32
  • 141KB
  • 下载

Java方法重载和方法重写的区别介绍

方法重载: 一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,或者是参数的个数或者类型不同。方法的返回类型和参数的名字不参与比较,也就是说如果两个方法的名字相同,即使类型不同,...
  • qq_18149897
  • qq_18149897
  • 2015-11-23 20:07:18
  • 1246

java:方法重载和方法重写的区别

方法重载: 代码示例: public void set(){ System.out.println("好好学习"); } public void set(String name){...
  • xuehyunyu
  • xuehyunyu
  • 2017-08-09 22:41:11
  • 260

java中方法重载和方法重写分析

用简单的话来说方法重载(Overloading)就是在同一个类中,方法的名字相同,但参数个数、参数的类型或返回值类型不同,方法重写(Overriding)是指子类和父类的关系,子类重写了父类的方法,但...
  • lisansi9999
  • lisansi9999
  • 2016-05-25 08:59:07
  • 614

C#中重载方法与重写方法的区别

在C#面向对象编程中,重写方法和重载方法是两个重要的概念,但我们有时会混淆这些概念,甚至一些参考书和网络上都弄错,现在对这两种概念澄清一下。 1.重载方法 在C#中,重载方法是指在类中有两个或两个...
  • znd8866
  • znd8866
  • 2013-07-14 15:39:32
  • 750

java中方法重写(Override)与方法重载(Overload)的区别

虽然知道方法重写与方法重载,但总是会忘记具体的区别以及一些细节,所以干脆就写一篇博客记录下来吧。 方法重写(Override):        在Java中,子类可继承父类中的方法,而不需要重新编写相...
  • BeauXie
  • BeauXie
  • 2016-10-31 20:16:54
  • 2249

方法重载和方法覆盖/重写的区别

方法重载和方法覆盖(或称重写,下问称覆盖)是我们进行Java语言编写中经常碰到的情况,但在编程中,因为开发软件自带提示和编译功能,我们往往不容易出错,但一回到纸质问答上,经常是容易混淆,吃了多次亏。所...
  • kafei_butian
  • kafei_butian
  • 2015-09-19 13:52:40
  • 3060
收藏助手
不良信息举报
您举报文章:一图区分方法重写与方法重载
举报原因:
原因补充:

(最多只允许输入30个字)