【转载】JAVA中的重写、重构和重载的概念区别

   JAVA中的重写、重构和重载的概念对于一个刚入门Java爱好者来说,很容易能混,下面就说一下我对着三个概念的理解。

  •      1.重写(override),又称为覆盖,应用于父类和子类之间,子类中的成员方法和父类中的成员方法同名,但方法的实现或者方法的权限(只能比父类方法的权限大)或者方法的返回值类型(只能是父类返回值类型的子类)不同。
  •      2.重构,是重写的一种,即子类成员方法和父类中成员的方法名相同,只有方法的实现不同。
  •      3.重载(overload),应用于同一个类中,同一个类中不同的成员的方法名相同,但方法入参的类型、个数、顺序不同。但容易忽略的一个重载是不定长参数的方法也是同名一般方法的重载。


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

父类:
 

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

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值