重载 overload
1.1定义
重载发生在同一个类中,要求方法名相同,参数列表不同(参数个数或类型不同),返回值类型与修饰符无限制。
1.2 注意点
1)必须在同一个类中;
2)一个方法可以有多个重载方法;
3)多用于构造器的重载;
4)方法名一定要相同,参数列表一定不同(再次强调了,很重要)。
1.3 何时用
在调用同一个类中的方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。实现同一方法多种使用。
1.4 案例
package test;
/**
* 测试方法的重载
*/
public class Test01 {
public static void main(String[] args) {
method();//我和我的玩偶开心的玩耍
method(10);//这个玩偶陪伴我10年了!
method("小小");//这个玩偶的名字是小小
}
public static void method(){
System.out.println("我和我的玩偶开心的玩耍");
}
public static void method(int x){
System.out.println("这个玩偶陪伴我"+x+"年了!");
}
public static void method(String name){
System.out.println("这个玩偶的名字是"+name);
}
}
看上述,我的三个方法的名字都是相同的,但是参数个数和类型不同,当我们调用时通过传入的参数不同可以调用不同的方法,以满足个人的需求。
重写 override
2.1定义
重写发生在父子个类中,遵循“两同两小一大”,基本方法名相同,参数列表相同,返回值类型和抛出的异常子类小于等于子类,修饰符子类要大于等于父类。
2.2 注意点
1、遵循“两同两小一大”;
2、对于返回值类型,若是八大基本类型,则字符类要求相同,若是引用类型,则子类小于等于父类;
3、final和static修饰的类不能被重写,但是,被static修饰的类可以再次被声明;
4、构造方法不能被重写。
2.3 何时用
当子类继承了父类,但父类的方法不能满足子类要求时就重写该方法再继续使用。
2.4 案例
package test;
/**
* 测试方法的重写
*/
public class Test02 {
public static void main(String[] args) {
Animals a = new dog();
a.run();
}
}
class Animals{
public void run(){
System.out.println("小动物们正在赛跑");
}
}
class dog extends Animals {
public void run(){
super.run();//调用父类的run方法
System.out.println("小狗迈着四条腿在奔跑");
}
}
看上述案例,我需要具体小狗是如何奔跑的,很明显父类的方法不能满足我的要求,就通过重写run方法来满足要求。
补充:如果重写方法后,又想调用父类的run方法,通过“super.方法名()”来实现。如上述案例中的super.run()。
重载与重写的异同点
相同点
方法名都要求要相同。
不同点
1、定义的位置不同。重载在同一个类中;重写在父子类中。
2、参数列表要求不同。重载要求参数列表必须不同(个数或类型);重写参数列表一定要相同。
3、修饰符和返回值类型要求不同。重载不限制修饰符和返回值类型,可相同可不同;重写要求子类的修饰符必须大于等于父类的,返回值类型针对基本类型要求相同,对引用类型要求子类的小于等于父类。
tip:方法的重写(Overriding)和重载(Overloading)都是java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是多态的具体表现形式之一。