💡方法重载
发生在类里面,即一个类中有两个或多个相同的方法名且每个相同方法名的形参列表不同,那么会在调用方法时引起重载。
- 方法重载与修饰符、返回值没有关系;与形参列表有关。
上面例子中,当调用class A{ String gender = "0"; public void setGender(int gender){ this.gender = String.valueOf(gender); } public String setGender(String gender){ this.gender = gender; return this.gender; } }
new A().setGender("0");
是知道调用哪个方法,从而可以加载到栈里面。
💡方法重写
发生在派生类里面,即子类的方法名和方法名的参数列表与父类相同,那么会在创建对象时引起重写。
如果返回值不同是否会被重写?
无法判断,需要满足下面两个条件:
-
子类方法的精度不能高于父类方法的精度(不兼容)
例如:子类方法的数据类型为Object
,父类方法的数据类型为String
,那么编译器会报错无法实现方法重写,因为String
继承于Object
,Object
的精度高于String
的精度。 -
子类方法的访问修饰符不能低于父类方法的访问修饰符
class A{
String gender = "0";
public void setGender(int gender){
this.gender = String.valueOf(gender);
System.out.println("A");
}
public String setGender(String gender){
this.gender = gender;
return this.gender;
}
}
class B extends A{
public void setGender(int gender) {
this.gender = String.valueOf(gender);
System.out.println("B");
}
}
上面例子中,当调用new B().setGender(0);
时,会去执行子类的方法体,因为子类里面有因此去调用子类的方法体。
💡方法重写与方法重载对应表
名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
---|---|---|---|---|---|
方法重载 | 本类 | 相同 | 不相同 | 无要求 | 无要求 |
方法重写 | 父子类 | 相同 | 相同 | 有要求 | 有要求 |
如果你是无意刷到这篇文章并看到这里,希望你给我的文章来一个赞赞👍👍。如果你不同意其中的内容或有什么问题都可以在下方评论区留下你的想法或疑惑,谢谢你的支持!!😀😀