简述override和overload的区别

在文档中经常遇到这两个单词,但是意思经常混淆。首先我们看一下这两个单词的含义:

override(重写,覆盖) (1)方法名、参数、返回值相同。 (2)子类方法不能缩小父类方法的访问权限。 (3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 (4)存在于父类和子类之间。 (5)方法被定义为final不能被重写。 (6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload(重载,过载) (1)参数类型、个数、顺序至少有一个不相同。 (2)不能重载只有返回值不同的方法名。 (3)针对于一个类而言。 (4)不能通过访问权限、返回类型、抛出的异常进行重载; (5)方法的异常类型和数目不会对重载造成影响;

override应用中,最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。 除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。

override是在不同类之间的行为,overload是在同一个类中的行为。

重载,在同一个类中,允许存在同名函数,但它们的参数个数或者参数类型不同即可。

public static void main(String[] args){
System.out.println(add(1,2));
System.out.println(add(1.11,2.22));
}
//返回一个int类型相加的和
public static int add(int a, int b){
return a + b;
}
//返回一个double类型想加的和
public static double add(double a, double b){
return a + b;
}

重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。

class Father{
int num = 3;
}
class Son extends Father{
int num = 5;
}


这时候子类继承了父类,也拥有了num,这时候输出num,JVM会先去父类中查找,输出父类中的num,但是子类有num,所有在运行子类的时候重写了num的值,输出5。

猜你喜欢

转载自blog.csdn.net/weixin_41697143/article/details/82110276