方法重写、重载和重写区别

1、方法重写的理解:

(1)含义:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。

(2)应用:重写以后,当创建子类对象后,通过子类对象调用子、父类中同名同参数的方法时,实际执行的是子类重写父类的方法。

(3)重写的规定:

方法的声明:权限修饰符 返回值类型 方法名(形参列表)throws 异常的类型{方法体}

约定俗称:子类中的叫重写方法,父类中的叫被重写的方法

具体理解:

① 子类重写方法的方法名和形参列表与父类被重写方法的方法名和形参列表相同;

② 子类重写方法的权限修饰符不小于父类被重写方法的权限修饰符;

注意:特殊情况:子类中不能重写父类中声明为private权限的方法。

③ 返回值类型:

若父类被重写方法的返回值类型是void,则子类重写方法的返回值类型只能是void;

若父类被重写方法的返回值类型是A类型,则子类重写方法的返回值类型可以是A类A类的子类

若父类被重写方法的返回值类型是基本数据类型(比如是double),则子类重写方法的返回值类型必须是相同的基本数据类型(必须也是double)。

④ 子类重写方法抛出的异常类型不大于父类被重写方法抛出的异常类型。


注意:子类和父类中同名同参数的方法,要么都声明为非static类型的(才考虑重写),要么都声明为static类型的(不是重写)。

2、重载和重写的区别(从编译和运行角度看):

重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数列表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。

Java的重载是可以包括父类和子类的,即:子类可以重载父类的同名不同参数的方法。

所以,对于重载而言,在方法调用之前编译器就已经确定了所要调用的方法,这称为 “早绑定”“静态绑定”

而对于多态,只有等到方法调用那一刻解释运行器才会确定所要调用的具体方法,这称为 “晚绑定”“动态绑定”

posted @ 2022-06-22 16:00  萧若風  阅读(81)  评论(0)    收藏  举报