java中重载和重写

java中经常会有面试题考一些重载和重写的知识下面分析二者各自特性以及如何区分

1)重载 (overload)

定义:java中允许方法名相同,但是参数列表不同,我们称之为方法的重载;

我们可以把 方法名 和 参数列表 定义为 方法签名;也就是方法签名包含方法名和参数列表两部分;一个类中是不可以有方法签名相同的两个方法,否则会报错的;

方法重载的意义:就是同一方法名根据传入的参数不同会有不同的方法功能;   具体举例就像超市的收银台可以收现金,可以刷卡,可以支付宝;可以微信,可以超市购物卡;收银台就可以比喻成一个收银方法,而付款方式久比喻成不同的参数;

(2)重写(override)

定义:子类覆盖继承自父类的方法,即方法名和参数列表都相同(即方法签名相同)但方法的实现不同称之为重写;重写一般都是在继承和实现接口的时候用到;

意义:可以修改父类方法,也可以在父类的基础上扩展功能(需要用到super关键字);有一点注意的是:在父类引用指向子类对象 时调用的还是子类的重写后的方法

(3)重写与重载区别

1)重载是在程序编译时就根据参数不同绑定不同的功能,重写则是在程序运行阶段根据对象类型不同调用(切记不是引用的类型是是对象的类型 new出来的是对象)

2)同一个类中是不会有重写的,但是可以有重载(例如构造方法的重载);而且子类也可以重载继承自父类的方法的;

3)重载是和返回值类型无关的两个方法的重载他们的返回值是没有要求可以相同也可以不同,

  重写的返回值是有要求的;

  有两种情况: 第一种返回值是基本类型 这时候重写方法的返回值一定是相同的; 第二种,返回值是引用类型,这时候重写方法的返回值可以与父类被重写的方法返回值类型相同(假设父类函数返回的是A类型的),也可以是A类的子类;而且子类重写方法抛出的异常也要比父类的小;

4)访问修饰:重载的访问修饰是不限定的;重写的访问修饰符 有要求: 子类的访问修饰符开放性大于或则着等于父类方法的访问修饰符,也就是说父类的 protected 修饰的函数  子类重写后要 是protected 活着public才行 不能是private;

最后留一道例题:

calss A{

  protected int F(int a,int b){

    return 0

  }

}

下列可以在A的子类中使用的是

A  public int F (int a, int b) { return 0; }      //重写

B  private int F(int a, int b) { return 0; }      //不可以  private小于protected

C  private int F(int a, long b) { return 0; }      //重载

D  public short F(int a, int b) { return 0; }      //不可以基本类型返回值不同

时间: 2024-10-13 17:50:56

java中重载和重写的相关文章

java中重载与重写浅析

java中重载与重写浅析 Overloading (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以

java中重载与重写的区别

首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不

Java中重载和重写的区别【转载】

首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不

java中重载和重写的区别

重载和重写的英文名字: 重载overload. 重写override. 其实把重载和重写放到一起比较本身没有太大的意义.因为: (1)重载主要发生在同一个类的多个同名方法之间 (2)重写发生在子类和父类的同名方法之间. 他们除了方法名相同之外,没有太大相似之处. 此外,子类和父类之间也会发生重载.如果子类定义了一个与父类相同名字的方法,但是参数列表不同的方法,那么就会形成子类方法和父类方法的重载.

我理解的Java中重载与重写

程序中我们用方法来实现对对象的操作,但是对象可能有不同的数据类型,这时候对不同的数据类型,进行相同的操作,我们就可以用到方法的重载,即方法名相同,但是具有不同的参数列表. 方法的重载可以根据传递参数的数据类型不同来调用方法,也可以根据参数个数不同来设计. 重载必须有不同的参数列表,返回类型和访问修饰符可以不同,也可以抛出不同的异常. 重写用在子类对父类的继承之中,当我们想使用父类之中的方法,但是又想在方法体中改变操作的时候,就可以用到重写. 重写方法的参数列表和返回类型必须与被重写方法相同,访问

java中重载和重写的区别(首先需要了解一下 多态)

多态:通俗来说,总的来说,同一种形式,不同的表现. 太长不看系列: 所谓多态,是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定.因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体

Java中重载、重写与重构的区别

一.重载 重载的概念:在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可. 重载的规则: 必须具有不同的参数列表. 可以有不同的返回类型,只要参数列表不同就可以了. 可以有不同的访问修饰符. 可以抛出不同的异常. 二.重写 重写的概念:(还可以称为覆盖)就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法的返回值类型 重写的规则: 参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载. 访问修饰符的限制一

Java中的方法重写 与 final关键字

Java中的方法重写 与 final关键字 以下程序是否存在错误? class Base { private final void method() { System.out.println("In Base..."); } } class Sub extends Base { public void method() { System.out.println("In Sub..."); } } 答案 正确的. 使用final关键字可以声明类.成员变量和成员方法,一

C++中重载、重写(覆盖)和隐藏的区别实例分析

这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念.具体分析如下: 1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 示例代码如下: class A{ public: void test(int