Overload
顾名思义,就是Over(重新)——load(加载),所以中文名称是重载。它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名、类型不能相同;或者说可以改变参数、类型但是函数名字依然不变。
重载需要注意以下几点:
1.重载是通过不同的方法参数来区分的。
2.不能通过方法的访问权限、返回值和异常类型来进行重载。
3.对于继承来说,如果基类方法的访问权限是private,就不能在派生类中对其进行重载。如果派生类中也定义了一个同名的函数,这只是一个新的方法,不会达到重载的效果。
Override
就是ride(重写)的意思,在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用这一函数时自动调用子类的方法,而父类相当于被覆盖(重写)了。
重写需要注意一下几点:
1.派生类中的覆盖方法必须和基类中被覆盖的方法有相同的的函数名和参数。
2.派生类中的覆盖方法的返回值必须和基类中被覆盖的方法的返回值相同。
3.派生类中的覆盖方法所抛出的异常必须和基类中被覆盖的方法所抛出的异常一致。
4.基类中被覆盖的方法不能是private,否则子类只是定义一个方法,并没有对其覆盖。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
区别
- 覆盖是子类和父类之间的关系,是垂直关系。重载是同一个类中的方法之间的关系,是水平关系。
- 覆盖只能由一个方法或只能由一对方法产生关系。重载是多个方法之间的关系。
- 覆盖要求 参数列表相同。重载要求参数列表不同。
网友评论