java面试之重载、重写、重构的区别

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> java面试之重载、重写、重构的区别

点击蓝字“程序员考拉”欢迎关注!

java面试之重载、重写、重构的区别

 

1.重载

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

 

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

12345678910111213141516171819202122232425
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;    }}

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;
}
}

 

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

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

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

2.重写

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

1234567891011121314151617181920212223242526
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;  }}

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;
}
}

 

3.重构

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

 

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

 

欢迎点赞分享到朋友圈!

 

java面试之重载、重写、重构的区别

 

原文始发于微信公众号(程序员考拉):

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> java面试之重载、重写、重构的区别


 上一篇
Java岗 面试考点精讲(网络篇03期) Java岗 面试考点精讲(网络篇03期)
点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 1. OSI七层模型 总结一下: 应用用层按协议打包数据 由传输层加上双方的端口号 由网络层加上双方的IP地址 由链路层加上双方的MAC地址,并将数据拆分
2021-04-05
下一篇 
Java面试-创建对象,你有几种方法? Java面试-创建对象,你有几种方法?
点击蓝字“程序员考拉”欢迎关注! Java创建对象的方式共有四种: 使用new语句实例化一个对象; 通过反射机制创建对象; 通过clone()方法创建一个对象; 通过反序列化的方式创建对象。 一.使用new语句实例化一个对象new语
2021-04-05