天天看点

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]