重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
重载:一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
实际操作中,个人印象是重写一般与@Override有关。有时编译器会报错,有时则不会。
那么,就让我们来就几种情况分析一下:
1.父类和子类:
这里父类创建了一个fatherFunc的方法
这里我定义一个子类,可以看到编译器是没有报错信息的。
我在子类里面写一个和父类名字和参数都完全相同的类,父类和子类是可以建立起联系的
这里我把返回值修改为String,可以看到编译器识别到重写的方法返回值发生了变化,不再符合重写的规则。
修改了参数并且增加了@Override后也是一样,不符合重写的规则(不加@会被认为是另一个跟父类方法没关系的方法。)
这里我把父类修改为抽象类
子类报错了,提示必须实现父类的抽象方法
子类更改返回值和参数也同样不行
我们再测试下接口的情况,新建一个接口用来被实现
子类接口重写后报错解除
更改参数或返回值报错,提示不符合重写规则
到这里,可以简单总结一下:
1.实体类继承,重写不强制,如果存在不符合规则的同名方法,子类的方法会被认为是一个跟父类没关系的新方法。
2.子类实现抽象类继承,子类接口实现必须重写抽象类和接口中的抽象方法。
3.重写的方法体可以和父类一样,也可以不一样。但是返回值,名字,参数必须和父类相同。
关于重载就简单多了。
可以看到,这些java内置的同名方法,可以称作重载。虽然重载翻译成Overload 但是千万注意,根本没有@Overload注解。
参数相同是不可以的。
这里可以总结一下重载了:
1.重载发生在单个类的内部。
2.方法名必须一致,参数必须不一致,返回值可以一致也可以不一致。方法体可以一致,也可以不一致。