几个重要选项的比较 :
选项 | 重写 | 重载 |
---|---|---|
方法名 | 必须相同 | 必须相同 |
方法返回值 | 必须相同(类型相同) | 可以不同 |
参数 | 必须相同 | 必须修改 |
方法修饰符 | 可以修改 | 可以修改 |
方法抛出的异常 | 可以修改 | 可以修改 |
详细说明 :
重载: 发生在同一个类里面
方法的重载,要求方法名称必须一致,与返回值无关,与方法的修饰符,跑出的异常都没有关系,方法的参数必须不同,其中包括,数量不同,类型不同,顺序不同,下面看一个简单的例子 :
public class Fatcher { String name; int age; public void function(){ System.out.println("父亲会赚钱养家"); } public void function(String actionDesc){ // 重载 System.out.println("父亲还会"+actionDesc); } String show(){ System.out.println("爸爸会给妈妈洗衣服,给孩子换尿不湿"); // 项目中是各种逻辑处理 return "父类返回值"; } }
调用 :
@Test public void testOverLoad(){ Fatcher fatcher = new Fatcher(); fatcher.function(); fatcher.function("看小姐姐"); }
输出 :
父亲会赚钱养家
父亲还会看小姐姐
重载的意义 : 针对不同情况,调用对应函数
重写(@overwrite): 存在于继承关系的子类里面,也就是说重写的两个函数一定是在两个类里面
方法的重写,要求方法名,返回值必须一致,方法的修饰符必须大于等于父类修饰符,抛出的异常必须是父类抛出的异常的子类,如果父类方法的修饰符是private,则不能被子类重写
public class Son extends Fatcher {
@Override
String show() { // 重写
//super.show(); // 这行代码,表示执行此方法,先执行父类的这个方法,可以不要
System.out.println("儿子会哭会闹会睡觉");
// 项目中是各种逻辑处理,肯定和父类的逻辑不一样
return "子类返回值";
}
}
执行 :
@Test public void testOverRide(){ Son son = new Son(); son.show(); }
输出 :
儿子会哭会闹会睡觉
重写的意义 : 从父类继承下来的方法,方法内部处理逻辑不能满足子类的需求,子类重新定义