Java重载重写重定义_java中重载一定在一个类里面吗?

虽然这些概念在翻译成中文的过程中,有很多不同的翻译方式

但本质上只有两种说法,就是Override和Overload

其中,Overload一般都被翻译成重载

而Override的翻译就乱七八糟了,所谓覆盖、覆写、重写、改写指的其实都是这个意思

那么为什么会有这么多名词,而不能统一一下呢?

打一个最简单的比喻吧,为什么老婆这个词有这么多叫法?而不能统一一下呢?

这个原因就不用我说了吧呵呵

所以,不管这个单词被翻译成多少种说法

在你学习的过程中,你只需要按照一种你喜欢的说法来使用就可以了

而对于其他的说法,你只需要在看到别人使用的时候

能够知道这跟你使用的某个说法的含义是一样的,就可以了

所以,在这里这个问题可以简化为

Overload和Override定义和区别是什么?

为了方便讲解,在这里我将使用“重载”和“覆盖”这两个名词

其中重载就是Overload,覆盖就是Override,你心里明白就可以了~

下面给出最基本的重载和覆盖的定义吧:

在同一个类中,如果定义了多个方法名相同,但是可以通过参数进行区分的方法,那么这些方法就可以称之为重载

在子类中,如果定义了方法名、参数和返回值都与父类完全相同的方法,那么子类中的这个方法就可以称之为覆盖了父类中的方法

所以,你只需要严格记住以上两个定义,就很容易区分重载和覆盖了

下面就结合上面的定义,再来看看你给出的代码吧:

[code=java]

class SuperClass {

public void method(int x, double y) {

System.out.println("我是父类SuperClass");

}

public void method(int x) {

System.out.println("我肯定是重载了");

}

}[/code]

在这里可以看出,由于method(int x)和method(int x, double y)的方法名相同,但是参数可以区分

所以这两个method就是重载关系

再来看下面这段代码:

[code=java]

class SubClass1 extends SuperClass {

public void method(int x, double y) {

System.out.println("我重定义了父类SuperClass,即覆盖了父类方法");

}

}[/code]

在这里可以看出,由于SubClass1继承了SuperClass

并且SubClass1中定义的void method(int x, double y)这个方法

和SuperClass中定义的void method(int x, double y)方法的方法名、参数和返回值完全相同

所以子类中的这个method就是覆盖了父类中的这个method

好,如果对上面的两段代码的解释你能够看懂的话

那我也来给出一段代码吧,看你能不能看的懂~

[code=java]

class SubClass3 extends SuperClass {

public void method(int x, double y) {

System.out.println("我是子类Subclass3");

}

public void method(int x) {

System.out.println("我是重载还是覆盖呢?");

}

}[/code]

在这段代码中,我们可以看到

由于在SubClass3中定义了两个方法名都为method的方法,所以它们的关系应该是重载

而由于在SuperClass中也定义了两个与它们完全相同的方法,所以它们和SuperClass中方法的关系又是覆盖

那么它们究竟是重载还是覆盖呢?其实在上面的这两句话中,我已经给出答案了

在SubClass3中,这两个方法的关系是重载

和SuperClass中,的这两个的方法的关系是覆盖

所以,你既可以把它们看成是重载,又可以看成是覆盖

区别只在于,你是从什么角度去看它们的

好了,关于重载和覆盖就解释这么多吧

对于为什么要有这两种概念,以及如何去应用它们,这个就只能靠你以后慢慢去体会了呵呵

Tips:

在这里再补充一点小小的细节吧:

什么叫可以通过参数进行区分呢?主要有以下三种区分方式:

1、参数的数量不同,例如method(int)和method(int, int)

2、参数的类型不同,例如method(int)和method(String)

3、参数的顺序不同,例如method(int, String)和method(String, int)

*注意,参数的顺序不同的前提必须是顺序不同的几个参数类型不能一样

例如如果是method(int, int)的话,那么不管怎么改变顺序都无法进行区分的

摘自:原文中一条评论

原文出处:http://bbs.itheima.com/thread-1379-1-1.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值