方法重载与方法重写
【重载Overload】
在同一个类中,方法名相同,形参列表不同的时候,多个方法构成了重载。(参数类型不同,参数个数不同,不同参数类型的位置不同)
public class Person {
//eat()方法重载
public void eat() {
System.out.println("吃了碗面条。");
}
//参数类型不同
public void eat(int num) {
System.out.println("吃了:"+ num + " 碗面条。");
}
public void eat(String name) {
System.out.println(name + " 吃了碗面条。");
}
//参数个数不同
public void eat(String name,int num) {
System.out.println(name +" 吃了 "+ num + " 碗面条。");
}
//不同参数类型的位置不同
public void eat(int num,String name) {
System.out.println(num + " 碗面条被 " + name + " 吃了!");
}
//sleep()方法重载
private void sleep() {
System.out.println("睡觉。");
}
//与访问修饰符无关
void sleep(String str) {
System.out.println("睡"+ str +"觉。");
}
//与返回值无关
public int sleep(String str,int time) {
System.out.println("睡"+str+"觉: " + time + " 小时。");
return time;
}
}
【重写Override】
在不同的类中,子类对父类提供的方法不满意的时候,要对父类的方法进行重写。
1.需要继承;
2.子类重写父类的方法;
3.子类重写的方法签名和父类一样;
4.子类重写方法的访问修饰符可以和父类不一样,但是必须要高于父类的访问权限。
父类和子类中都有一样的方法了,当new子类的时候,会调用子类重写的方法。
public class Animal {//父类--动物类
//公共方法,无参数,无返回值
public void eat() {
System.out.println("动物在吃食物。");
}
//公共方法,有参数,无返回值
public void sleep(String str) {
System.out.println("动物在睡 " + str + " 觉");
}
//公共方法,有参数,有返回值
public int sleep(int time) {
System.out.println("动物睡了 " + time + " 小时觉");
return time;
}
//私有方法,无参数,无返回值
private void play() {
System.out.println("动物在玩耍。");
}
}
public class Bird extends Animal{//子类--小鸟类
//重写--公共方法,无参数,无返回值--方法声明与父类保持一致
@Override
public void eat() {
System.out.println("小鸟在吃食物。");
}
//重写--公共方法,有参数,无返回值--方法声明与父类保持一致
@Override
public void sleep(String str) {
System.out.println("小鸟在睡 " + str + " 觉");
}
//重写--公共方法,有参数,有返回值--方法声明与父类保持一致
@Override
public int sleep(int time) {
System.out.println("小鸟睡了 " + time + " 小时觉");
return time;
}
//重写--私有方法,无参数,无返回值--子类的修饰符必须大于等于父类的访问权限
@Override
public void play() {
System.out.println
("小鸟在玩耍。");
}
}
【Java中的重载与重写有什么区别?】
1、重载发生在本类中,重写发生在继承中,子类重写父类的方法;
2、重载的方法名必须相同,与访问修饰符和返回值无关,与参数列表有关,重写的方法名必须相同且访问修饰符必须大于等于父类的访问修饰符,返回值类型必须相同,参数列表必须相同。
方法重载与方法重写,两者无任何关系!
最后,附上一张比较perfect的table!
英文 | 位置 | 修饰符 | 返回值 | 方法名 | 参数 | 抛出异常 | 方法体 | |
---|---|---|---|---|---|---|---|---|
重载 | overload | 同一个类中 | 无关 | 无关 | 必须相同 | 必须不同 | 无关 | 不同 |
重写 | override | 继承,子类重写父类的方法 | 子类小于等于父类 | 必须相同 | 必须相同 | 必须相同 | 子类小于等于父类 | 不同 |