Java面试——重载、重写、重构的区别

一、重载

构造函数是一种特殊的函数,使用构造函数的目的是用来在对象实例化时初始化对象的成员变量。由于构造函数名字必须与类名一致,我们想用不同的方式实例化对象时,必须允许不同的构造方法同时存在,这就用到了重载。

重载虽然起源于构造方法,但是在普通方法中也可以使用方法的重载。方法的重载就是在同一个类中允许同时存在多个同名方法,只要这些方法的参数类型、个数、顺序不同即可。

package com.java.test;
public class ReLoad {
  //构造方法的重载
  public ReLoad(int a,int b) {
    System.out.println("a+b");
  }
  public ReLoad(int a){
    System.out.println("a");
  }

  //普通方法的重载
  public static int reload(int a,int b){
    return a+b;
  }
  public static int reload(int a){
    System.out.println(a);
    return a;
  }
  public static double reload(double a,int  b){
    return a+b;
  }
  public static double reload(int a,double b){
    return a+b;
  }
}

知道了方法的重载,我们很容易想到定义不定长参数来实现方法的重载

//定义不定长参数实现方法的重载
public static int reload(int...a){
  int s=0;
  for(int i=0;i<a.length;i++){
    s+=i;
  }
  return s;
}
//调用
reload(1,2,3);
reload(1,2,3,4,5);

二、重写

重写(又叫覆盖)是继承的实现方式之一,也就是说只有在子类中才会出现方法的重写。重写是指在子类中保留父类成员方法的名称不变,参数列表不变,重写成员方法的实现内容,修改成员方法的返回值类型(必须满足修改的返回值类型是父类中同一方法返回值类型的子类),或更改成员方法的存储权限。

package com.java.test;
class ExtendsTest{
  protected int adds(int a,int b){
    int s=0;
    s=a+b;
    return s;
  }
  protected ExtendsTest doIt(){
    return null;
  }
}
public class tests extends ExtendsTest{
  //重写成员方法的实现内容,修改成员方法的存储权限
  public int adds(int a){
    return a;
  }
  //修改成员方法的返回值类型
  protected tests doIt(){
    return null;
  }
  //重构,只重写实现内容
  protected int adds(int a,int b){
    System.out.println("重构");
    return a+b;
  }
}

三、重构

重构是继承中一种特殊的重写方式,只重写子类方法中的实现内容,成员方法的名称,参数类型、个数及成员方法的返回值都保持不变

综上,重载可以出现在任意类的任意方法中,方法的名称相同,参数的类型,个数,顺序三个中只要有一个不同即可实现方法的重载。重写和重构是发生在子类中,也就是说只有出现继承才会需要重写和重构的实现。重写可以通过修改成员方法的实现内容,修改成员方法的返回值类型或更改成员方法的存储权限实现,但必须保证方法名和参数列表不变。而重构是一种特殊的重写方式,只可以重写实现内容,其他都不能改变。

写在最后:

既然看到这里了,觉得笔者写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!

原文地址:https://blog.51cto.com/13754022/2361296

时间: 2024-10-01 07:53:44

Java面试——重载、重写、重构的区别的相关文章

C#重载重写重构

前言 前几篇博客说了重写和重载,今天主要说重构,顺便比较一下三者. 重构.重写.重载 重构就是通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性.通俗点说,重构,就是改善既有代码的设计,让代码更加的符合面向对象规则. 而重写是出现在多态里的,virtual关键字声明虚方法,子类通过override来实现方法重写.在父类里声明了一个模糊的方法,并不给出具体的行为,在子类里,通过重写父类中的这个方法,让这个方法实例化,去适合子类. 重载,通俗来讲,它的作

C++重载重写和多态区别

1.重载和重写的区别: 重载overload:在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态. 重写override:也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是private的,子类中重写函数改为public,protected也可以,体现了多态. 重定义redefining

Java中重载与复写的区别、super与this的比较

1. 方法重载与方法复写的区别 区别 方法重载 方法复写 英文单词 Overloading Override 概念 方法名称相同,参数的个数或者类型不同 方法名称相同,参数的个数和类型相同,方法的访问权限不能更严格 使用范围 发生在同一个类中 发生在继承关系中,是由子类进行复写 2.  super与this的比较 比较 super this 使用范围 是由子类访问父类中的内容 是直接访问本类中的内容 访问属性时的格式 super.父类属性, 如果属性没有被复写,则也可以不写super this.

Java面试求职之==与equals()区别

Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型(也称原始数据类型):byte,short,char,int,long,float,double,boolean,他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址.所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,在O

方法的重载与重写有什么区别?

Java中函数重载与函数重写 方法重载(overloading method) .方法重载是让类以统一的方式处理不同类型数据的一种手段.Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不 同的定义.调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法, 这就是多态性.下面是一个方法重载的例子: Java代码 class MethodOverloading { void receive(int i) { System.out.println("

java中重载与重写浅析

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

重载-重写(覆盖)-隐藏的区别

重载和重写搞的差不多了,隐藏有有点混乱了,在此记一下,留作后看 成员函数被重载的特征(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.重写(覆盖)是指派生类函数覆盖基类函数,--这是c++多态的标志,虚函数赋零则变成虚基类(纯粹的接口申明类),特征是(1)不同的范围(分别位于派生类与基类):(2)函数名字相同:(3)参数相同:(4)基类函数必须有virtual 关键字.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下(1)如果派

JAVA构造器,重载与重写

1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过new关键子来调用构造器,从而返回该类的实例,是一种特殊的方法. 备注要点: a. 通过new关键字来调用 b. 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型是本类), 不能在构造器使用return返回某个值. c. 如果没有我们定义构造器,则编译器会自动定义一个无参构造器. 如果已定义构

Java之方法重写、方法重载、多态

Java之方法重写.方法重载.多态博客分类: java语言Java重写重载多态 一.方法重写(Override) 子类可以重写父类的方法. 方法的返回值类型.参数类型.参数个数都不能改变,只能重写方法体. 方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型必须完全与被重写方法的返回类型相同: 访问权限不能比父类中被重写的方法的访问权限更低. 例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected. 解释:用于多态(父类引用子类对象). 声明