面向对象编程
Override
1 什么是方法的重写
方法的重写针对的是子类中继承的父类中的方法,其本质是子类针对继承来的一个方法,重新写一个方法来将其覆盖掉,起到子类使用该方法时不再是使用父类中的,而是自己重写的。
方法的重载是指同一个类中,同名的不同方法,本质上是构造同名的不同的方法。方法的不同,体现在调用上,而调用的格式为[对象.]方法名(参数)
,因此重载就是要求参数不同即可,这样就能在调用上体现出不同的方法。
方法的重写由于要覆盖掉从父类继承来的方法,相当于按照从父类继承来的方法的调用方式,调用到的却不是父类继承的方法,而是重写的方法。也就是说,与被重写的方法相比,重写的方法应该是与被重写方法调用起来没有区别,但是方法本身的内容已经是新内容。这也体现在方法重写
的规定中。
2 方法的重写的规定
从方法的构造格式来一一说明方法重写
的规定:权限修饰符 [关键字] 返回值类型 方法名(参数) [throws 异常类型]{}
1) 子类重写的方法与父类被重写的方法的方法名
和参数
相同。这样才能覆盖
,因为调用起来相同。
2) 子类重写的方法的权限修饰符
比父类被重写的方法的权限修饰符
的允许使用权限更大。这样才能使得子类在调用重写方法时,在可使用的情况下都是使用的重写的方法,完全实现不再使用父类继承来的该方法。
3) 子类不能重写父类中声明为private
的方法。因为private
本身就是父类内部才能使用,重写也没有意义,子类本来也无法使用。
4) 子类重写的方法的返回值类型
与父类被重写的方法的返回值类型
相同,或者也为子父类
关系。注意,基本数据类型不存在子父类,也就是说,如果父类被重写的方法的返回值类型
为基本数据类型,子类重写该方法的返回值类型
必须与其相同。
5) 子类重写方法抛出的异常类型
不大于父类被重写方法抛出的异常类型
。
6) 子类与父类中的同名同参数的方法,两者要么都是static
修饰,要么都为非static
修饰。注意,同为static
修饰,不构成方法的重写。
3 注意
需要注意的是,对于一个类本身或该类的对象,其使用一个自己能够使用的方法时,如果自己本身就有,会使用自己的方法。
也就是说,只要是子类重写的方法,意味着只要子类本身或子类对象来调用,就会使用该重写的方法。
另一个方面是,如果子类和父类具有同名同参数的方法,但是没有构成重写,此时子类调用这个方法一定是调用的自己的方法,但是如果子类通过父类的没有被重写方法来间接调用该没有被重写的方法,相当于父类调用该方法,调用的就是父类的方法。
但是,如果子类通过父类的没有被重写的方法来间接调用该被重写的方法,只要是重写的方法,都是用自己的,因此调用的还是自己的方法。
重写的含义是,该方法的内容完全被新的内容重新覆盖,也就是说子类重写的方法中,如果有调用子类私有的或者其他方法或属性,这些被调用的方法或属性,只要是子类本身具有的,这些本身具有的方法或属性也会作为重写的新内容,而不是以调用的层面来理解,直接理解为加载过来作为重写中的一段内容。