JAVA 中的重写、重构、重载

HaloZhao 2018-05-22 12:42:56
JAVA中的重写、重构和重载的概念对于一个刚入门Java爱好者来说,很容易能混,下面就说一下我对着三个概念的理解。
1.重写,又称为覆盖,应用于父类和子类之间,子类中的成员方法和父类中的成员方法同名,但方法的实现或者方法的权限(只能比父类方法的权限大)或者方法的返回值类型(只能是父类返回值类型的子类)不同。
2.重构,是重写的一种,即子类成员方法和父类中成员的方法名相同,只有方法的实现不同。
3.重载,应用于同一个类中,同一个类中不同的成员的方法名相同,但方法入参的类型、个数、顺序不同。但容易忽略的一个重载是不定长参数的方法也是同名一般方法的重载。


从上面的介绍可以看出,重写是父类和子类之间的玩的,主要玩的是方法实现;重载是同一个类自己玩的,主要玩的是入参,不能通过单一的返回值不同说是重载。

父类:
public class A {

protected static int i = 10;
protected A print(int j,double x)
{
System.out.println("A print");
return new A();

}

//重载起源于构造函数,如下面的有参构造和无参构造就是重载
public A() {
super();
System.out.println("A");
}

public A(int i) {
super();
this.i = i;
}
}

子类:
public class B extends A {

/**
* 重写A中的 protected A print(int j,double x)
* 权限变大,返回值变为A的子类,方法实现不同(三者只要变一个就构成重写)
*/
public B print(int j, double x)
{
j++;
System.out.println("B print");
return new B();
}
/**
* 重构,重写的一种,只是方法实现变了。(和上面的方法不能构成重载,所以编译报错,只能注掉)
*/
// protected A print(int j,double x)
// {
// j++;
// return new A();
//
// }

/**
* 重载 print(int j, double x)
* 入参个数变化
*/
public B print(int j)
{
j++;
System.out.println("B print");
return new B();
}

/**
* 重载 print(int j, double x)
* 入参种类变化
*/
public B print(int j, long l)
{
j++;
System.out.println("B print");
return new B();
}

/**
* 重载 print(int j, double x)
* 入参顺序变化 (返回值类型发生了变化,不影响,不能单独作为重载的标准)
*/
public A print(double x, int j)
{
j++;
System.out.println("B print");
return new B();
}
/**
* 重载 print(int j, double x)
* 不定长参数方法,入参相当于数组
*/
protected void print(int ...is)
{
System.out.println("B print");
}

}

...全文
1114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
verejava 2018-05-22
  • 打赏
  • 举报
回复
Java 面向对象 之 方法的重载 http://www.verejava.com/?id=16992753789137 Java 面向对象 之 方法的覆盖 http://www.verejava.com/?id=16992799039246
devin_jia 2018-05-22
  • 打赏
  • 举报
回复
这个 面试经常看到

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧