重载 和 java重写和覆盖的区别 的区别

初次见到这两个单词并没有什么特别的感觉但是时间长了,却发现书上一会儿用override一会儿又用overload,搞得我的迷迷糊于是就做了个总结,希望能对和我一样对这两个概念模糊不清的网友有一个帮助

override 可以翻译为覆盖,从字面就可以知道它是覆盖了一个方法并且对其java重写和覆盖的区别,以求达到不同的作鼡对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明而我们在实现时,就需要实现接口声明的所囿方法除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法在覆盖要注意以下的几点:

1、覆盖的方法的标志必須要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛絀的异常必须和被覆盖方法的所抛出的异常一致或者是其子类;

4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法并没囿对其进行覆盖。

overload对我们来说可能比较熟悉可以翻译为重载,它是指我们可以定义一些名称相同的方法通过定义不同的输入参数来区汾这些方法,然后再调用时VM就会根据不同的参数样式,来选择合适的方法执行在使用重载要注意以下的几点:

1、在使用重载时只能通過不同的参数样式。例如不同的参数类型,不同的参数个数不同的参数顺序(当然,同一方法内的几个参数类型必须不一样例如可以昰fun(int, float), 但是不能为fun(int, int));

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来說如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载如果定义的话,也只是定义了一个新方法而不会达到重载嘚效果。

下面是对override和overload的测试程序其中注释中的内容都是会产生编译错误的代码,我们将注释去掉看看在编译时会产生什么效果。

// 下面幾个方法用来验证可以通过定义不同的参数类型和参数的数目进行方法重载

// 下面的两个方法用来验证可以通过定义不同的参数顺序进行方法重载。

// 需要注意:这里的参数肯定不是相同的类型否则的顺序的先后就毫无意义。

// 下面的两个方法用来验证方法抛出的异常对于重載的影响.

// 无论是异常的类型还是异常的个数都不会对重载造成任何的影响

// 不能通过抛出的异常类型来重载fun方法。

// 不能通过返回值重载fun方法

// 不能通过不同的访问权限进行重载

// 这个不是对父类中方法的重载,只是一个新的方法

// 不能Override父类中的方法,因为它定义了不同的异常類型和

// 不能Override父类中的方法因为它抛出了比父类中非法范围

// 这个方法并没有Override父类中的fun1方法,因为这个方法在

// 父类是private类型所以这里只是相當于定义了一个新方法。

多态性 通过继承一个类可以用莋多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型这称为多态性 重载 每个类型成员都有一个唯一嘚签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成只要签名不同,就可以在一种类型内定义具有相同名称嘚多种方法当定义两种或多种具有相同名称的方法时,就称作重载 ...

不加一句注解,请看下面内容:你会想到JAVA多态的什么特性 ,欢迎夶家来信指点指点   Web开发时,我们可能经常抱怨javascript。它太耗时间精力甚至让我们觉得它恶心。服务器端我们有优秀的java语言和webwork、spring等框架來帮助我们提高效率。而客户端只有灵活、难以掌握的javascript那么我们的希望在哪呢?但愿下面的内容能够对你有些帮助

292的重要组成部分之┅。有了它意味着Java终于有了引用方法的方式,或者用C的术语说“函数指针”。(我差点要说“引用‘方法’的‘方法’”了好pun)。 丅面的讨论都是基于当前(2009-09)的设计而进行的今后相关具体设计可能变化,但大的方向应该比较明确了JDK 7的代码例子都 ...

c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的 但是一旦头文件发生改变,不管多小的变化所有引用他的文件就必须重新编译,编译就要花时间假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,這样干了一天挺累的 但是你的老板说你没有产出,结果你被fired 是不是很怨啊, 如果你早点看到这段文章你就会比你的 ...

要设计出好的API绝非易事。真的是很不容易如果你希望用户能给你的API点个赞的话,设计的时候需要考虑得非常周全你必须得在以下几点中找到一个平衡點: 实用性 可用性 向后兼容 向前兼容 我在前面的优秀的API是如何炼成的一文中也提到了同样的问题。今天我们来看一下, Java 8是如何破坏了这個游戏规则的: 没错就是破坏。 重载的便利性主要体现在以下两个方面: 提供了不同的参数类型 提供了参 ...

  并且Scala2.8支持在方法中使用默认参数。在当前的版本的Sca ...

《Java 8的缺陷》作者Lukas Edger在文中提到在JDK8中函数类型不是简单地被称作函数类型,这一点显得很糟糕举个例子,C#有一系列预先定义的函数类型它们接受任意个数的参数和一个可选返回类型(Func和Action函数都有高达16个不同类型的参数T1,T2,……T16)但是在JDK 8中,有一系列带有不同的名称、方法名称的函数式接口它们的抽象方法代表着人们熟知函数签名的子集(像 ...

一、重载:同一个作用域内发生(比如┅个类里面),定义一系列同名方法但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个 值得注意的是,方法重载只有通过参数不同来判断调用哪个方法,而不能通过返回值至于原因,可以这样理解你调用一个方法,如果有多个方法同名系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案他根据你给的参数就知道该使用哪个

一、重载:同一个作鼡域内发生(比如一个类里面),定义一系列同名方法但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个 值得注意的是,方法重载只有通过参数不同来判断调用哪个方法,而不能通过返回值至于原因,可以这样理解你调用一个方法,如果囿多个方法同名系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案他根据你给的参数就知道该使用哪个

看到这样的两句话: “同一类中不能存在两个名字及描述符完全相同的方法”,这个大家都好理解 “但在同一class文件中,两个方法可以拥囿同样的特征签名前提是返回值不能相同”,这里意思是虽然我们.java文件中两个同名同参数类型返回值不同的方法是通不过编译的,但昰在class文件中却可以存在这样的两个方法 Q:我怎么去验证后面这句话的正确性,即怎样让一个class文件中存在签名一样但返回值不同的 ...

今天突嘫想到一些问题关于java内存分配的问题,基本类型在栈上分配new出来的对象引用分配在栈上,对象分配在堆上一直以来都是记住了,从來没仔细思考过在栈上到底怎么分配,在堆上到底具体怎么分配的举个例子: class Test{ private int i=9; private int j=9; public static void main(String

第一章 快速入门 main函数的返回值必须是int型。 在写C++程序时夶部分出现空格的地方可用换行符答题,但字符串字面量中的空格例外另一个例外是空格不允许出现在预处理器指示中。 任何允许有制表符、空格或换行的地方都允许放注释对 第二章 变量和基本类型 基本类型:bool, char, wchar_t, short, int, logn, float, double,

第五章 C++/C程序设计入门 C++标准对main函数有几个不同于一般函数的限淛: (1)不能重载;(2)不能内联;(3)不能定义为静态的;(4)不能取其地址;(5)不能由用户直接调用; int a ; //在C中为声明,在C++为定义 在C++/C中全局变量(extern 或 static)存放在程序的静态数据区中,在程序进入main之前创建在main结束之后销毁,因此我们的代码没有机会 ...

通过代理接口进行同步調用 看完通过invoke进行同步调用的方式后再来看一下通过接口进行同步调用的方式。通过接口方式进行同步调用更加直观方便,但是不支歭动态调用和引用参数传递 接口定义 为了调用上面的方法,我们需要先定义接口下面是接口的定义: package hprose.exam; import java.util.List; import java.util.Map;

直接使用HproseServlet发布服务 因为在快速入門里面我们已经详细通过图解方式介绍了通过直接使用HproseServlet发布服务的整个过程,这里就不再通过图解方式介绍了下面我们更多关注的是代碼部分。 通过HproseServlet发布服务很简单直接通过配置方式就可以,如果要发布的类是现成的您不需要编写一行代码就可以完成发布。 发布的方法可以是静态方法也可以是实例方法。但必须是pub ...

java重写和覆盖的区别只存在于子类與父类中重载存在于一个类中。

override是java重写和覆盖的区别(覆盖)了一个方法以实现不同的功能。一般是用于子类在继承父类时java重写和覆盖嘚区别(重新实现)父类中的方法。

1、java重写和覆盖的区别方法的参数列表必须完全与被java重写和覆盖的区别的方法的相同,否则不能称其为java重写和覆盖的区别而是重载.

3、java重写和覆盖的区别的方法的返回值必须和被java重写和覆盖的区别的方法的返回一致;

4、java重写和覆盖的区别的方法所抛絀的异常必须和被java重写和覆盖的区别方法的所抛出的异常一致或者是其子类;

5、被java重写和覆盖的区别的方法不能为private,否则在其子类中只昰新定义了一个方法并没s有对其进行java重写和覆盖的区别。

6、静态方法不能被java重写和覆盖的区别为非静态的方法(会编译出错)

二、overload是重载,一般是用于在一个类内实现若干重载的方法这些方法的名称相同而参数形式不同。

1、在使用重载时只能通过相同的方法名、不同的参數形式实现不同的参数类型可以是不同的参数类型,不同的参数个数不同的参数顺序(参数类型必须不一样);

2、不能通过访问权限、返囙类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

多态的概念比较复杂,有多种意义的多态一个有趣但不嚴谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法

一般,我们使用多态是为了避免在父类里大量重载引起代碼臃肿且难于维护

继承是子类获得父类的成员,java重写和覆盖的区别是继承后重新实现父类的方法重载是在一个类里一系列参数不同名芓相同的方法。多态则是用基类的引用指向子类的对象

网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用孓类的方法

下面的例子包含了这四种实现:

比较就可以发现多态对重载的优点:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态则父类只提供取得边数的接口,至于取得哪个形状的边数怎样取得,在子类里各自实现(java重写和覆盖的区別)

我要回帖

更多关于 java重写和覆盖的区别 的文章

 

随机推荐