overwrite java_Java中的Override, Overload和Overwrite

中文翻译分别是覆盖,重载和重写

Override 和 Overwrite

实际上覆盖(Override)和重写(Overwrite)是对同一概念的不同称呼。

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写

Java中,需要重写(覆盖)父类中的方法,或者实现接口中的方法,可以用@Override标注这是一个此方法重写了(覆盖)父类/接口中的方法。

Overload

重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数,具体解释见下面代码。

示例代码

/**

* @author jimyoung

*/

class A {

char i = 'a';

public void fun(int a) {

System.out.println("调用A.fun(int a)");

}

public void fun(int a, int b) {

System.out.println("调用A.fun(int a, int b)");

}

}

class B extends A {

char i = 'b';

/**

* 此方法是A.fun(int a, int b)的一个重写/覆盖(Override/Overwrite)

*/

@Override

public void fun(int a, int b) {

System.out.println("调用B.fun(int a, int b)");

}

/**

* 此方法是B.fun(int a, int b)的一个重载(Overload)

* 重载要求方法名相同,参数不同(包括参数个数,参数类型,参数顺序,任一不同即可)

* void fun(double i, int j) 和 void fun(int j, double i)也构成重载关系

* 重载对返回结果不作要求,因为无法在调用的时候通过返回结果来明确调用的是哪个函数

*/

public void fun(int a, int b, int c) {

System.out.println("调用B.fun(int a, int b, int c)");

}

public static void main(String[] args) {

A a = new B();

B b = new B();

b.fun(1);

b.fun(1, 1);

b.fun(1, 1, 1);

a.fun(1);

a.fun(1, 1);

/**

* 子类不能覆盖父类的属性

*/

System.out.println(a.i);

System.out.println(b.i);

/**

* 无法进行下方这样的调用,因为父类引用不能访问子类中独有的方法

* 如果子类对父类方法进行了重写,那么访问的是子类中的方法,参考a.fun(1, 1);的执行结果(多态的体现)

*/

//a.fun(1, 1, 1);

}

}

输出结果

调用A.fun(int a)

调用B.fun(int a, int b)

调用B.fun(int a, int b, int c)

调用A.fun(int a)

调用B.fun(int a, int b)

a

b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值