为什么要有override这个方法?
对于已经投入使用的类,尽量不要进行修改,推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新功能。
方法覆盖重写的注意事项:
必须保证父子类之间方法的名称相同,参数列表也相同。
@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。
这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
子类方法的返回值必须【小于等于】父类方法的返回值范围。
小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的子类。
子类方法的权限必须【大于等于】父类方法的权限修饰符。
小扩展提示:public > protected > (default) > private
备注:(default)不是关键字default,而是什么都不写,留空。
Java中存在两种多态:重载(Overload)和重写(Override)。其中,重写是与继承有关的多态。方法重载是两种多态的一种,例如,你让一个人执行“求面积”操作时,他可能会问题你求什么面积。所谓多态性,是指可以向功能传递不同的消息,一边让对象根据相应的消息来产生相应的行为。对象的行为通过类中的方法来实现,那么行为的多态性就是方法的重载。
方法重载的语法规则
方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同。两个方法的参数不同是指满足下列之一:
- 参数个数不同
- 参数个数相同,但参数列表中的某个参数的类型不同。
避免重载出现歧义
重载方法之间必须保证相互的参数不同,但需要小心的是,重载方法在被调用时可能出现歧义调用。例如,下面的Dog类中的cry方法就是容易引发歧义的重载方法(Dog类没有语法错误):
【情况1】对于上述Dog类,若调用Dog.cry(10.0, 10); 则输出的信息是“小狗”。
【情况2】若调用Dog.cry(10, 10.0); 则输出的i信息是“small dog”。
【情况3】若调用Dog.cry(10, 10); 则无法通过编译(提示信息:对cry的引用不正确),因为Dog.cry(10, 10); 不清楚应当执行重载方法中的哪一个(出现歧义调用)。