1.1 方法重写和重载的区别
:rocket:请看表格对比
名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
---|---|---|---|---|---|
重载(overload) | 本类 | 必须一样 | 类型、个数、顺序 至少有一个不同 |
无要求 | 无要求 |
重写(override) | 父子类 | 必须一样 | 相同 | 子类重写的方法,返回类型和父类一样或者是父类的子类 |
子类方法不能缩小父类方法的访问范围 |
:rocket::rocket::rocket:如果你基础比较好,面向对象思想掌握的比较扎实,那你应该已经看懂了吧;
:rocket::rocket::rocket:如果还有疑问,请看下面更加详细的知识点和代码示例吧。
:airplane::airplane::airplane:
2.1 方法重载(OverLoad)
==相同的方法名字,参数列表不同,调用也就不同==
例如(以下四个方法均构成重载):
//1号方法
public sum (int a,int b){
return a + b;
}
//2号方法
public sum (int a,int b,int c){
return a + b + c;
}
//3号方法
public sum (int a,int c,int b,){
return a + b + c;
}
//4号方法
public sum (int a,double c,int b,){
return a + b + c;
}
2.1.1方法重载使用细节:
- 方法名:必须相同。
- 形参列表:必须不同(形参类型&&个数&&顺序,至少有一样不同,参数名无要求)。
- 返回值无要求。(3号方法返回值类型为int;4号方法返回值为double)
- 在调用sum()方法时,根据参数列表来自己匹配合适的方法。
:airplane::airplane::airplane:
2.2 方法重写/覆盖(override)
发生在继承中,子类有一个方法,和父类的某个方法名称、返回类型、参数
一样,即子类方法重写了父类方法
2.2.1方法重写使用细节:
- 子类的方法的
参数、方法名称
要和父类完全一样 - 子类的方法返回类型和父类一样或者是父类返回类型的子类(例如:父类为Object子类为String)
- 子类方法不能缩小父类方法的访问权限。
//Dog父类
class Dog{
public feed(){
System.out.print("喜欢吃骨头");
}
//Teddy(泰迪)子类
}
class Teddy extends Dog{
public feed(){
System.out.print("喜欢吃面条");
}
}
主类中实例化一个泰迪
Teddy wangwang = new Teddy;
wangwang.feed();//
以上有两个feed方法,因为子类Teddy类中的feed()重写了父类Dog中的feed(),所以这里输出的就是“喜欢吃面条”。
以上就是重载与重写的区别与详细描述了!
:car::car::car:肯定有人问:我的泰迪有时候喜欢吃面条,也有时候吃骨头,那我能不能让Teddy(泰迪)类也调用父类中的feed()方法呢?
:bullettrain_side::bullettrain_side::bullettrain_side:敬请期待下节的==多态中的向上转型与向下转型==