OverLoad重载:同名函数具有不同的参数列表。
两个或以上的方法,方法名相同,但是参数列表(可以是参数数量或类型)不同。
重载方法必须满足下列条件
(1) 方法名必须相同
(2) 方法的参数签名必须相同
(3) 方法的返回类型和方法的修饰符可以不相同
注意点:
1. 不能通过访问权限、返回类型、抛出的异常进行重载;
2. 对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
通常会想为什么不能用方法的返回值类型来区分重载方法呢?
比如
1. void method(){}
2. int method(){}
3. int method(int x, show y){}
只要编译器可以根据语境明确判断出语义,比如在int x =method()中,那么的确可以据此区分重载方法。不过,有时你并不关心方法的返回值,你想要的是方法调用的其他效果(这常被称作为“为了副作用而调用”),这时你可能会调用方法而忽略其返回值。所以,如果像下面这样调用方法:
method();
此时Java如何才能判断该调用那一个method()呢?别人该如何理解这中代码呢?
因此 ,根据方法的返回值来区分重载方法是行不通的。
Override重写:也称 覆盖 :在子类中定义某个方法与其父类有相同的名称和参数;子类对象引用或者子类对象的父类引用使用这个方法时,将调用子类中的定义。
(1) 方法名、参数、返回值必须相同 -- 三同
(2) 子类方法不能缩小父类方法的访问权限。 -- 一大
(3) 子类方法不能抛出比父类更多的异常(子类可以不抛出异常)。 -- 一小
(4) 被定义为final的方法不能被重写。
(5) 父类是静态,子类也要加静态。
(6) 父类方法用private修饰的话,即使子类里面有一模一样的方法,这不属于重写。 |