一、二者简介
1.在java的同一个类中的不同的两个或者多个方法可以有相同的方法名,并且这些方法的参数个数,类型,顺序不同,这样的方法就称为方法的重载。如下所示:这三个方法就构成了重载。
public class Main{ public static void main(Stirng[] args){ } public static void dosh(){} public static void dosh(int a,String b){} public static void dosh(String a,int b){} }
如果一个类中的方法仅仅是返回值类型不同。那么不构成方法的重载。编译器会报错,如下:
public class Main{ public static void main(Stirng[] args){ dosh();//调用第一个方法 dosh(2,"abc");//调用第二个方法 dosh("abc",2);//调用第三个方法 } public static void dosh(){}; public static void dosh(int a,String b){} public static String dosh(int a,String b){} }
显然,这两个方法除了返回值不同之外,其余的均相同。这不构成重载,编译器不允许这样定义。当方法被重载之后,jvm虚拟机会根据调用方法的时候传入的参数的个数,参数的顺序,参数的类型,从而调用相应的方法。
2.在java中重写是指子类继承父类后,在子类中把父类中的某一个或者多个方法重新定义,其方法名,返回值类型,参数个数,参数类型,参数的顺序都要和父类中的被重写的方法一模一样。如下:
public class Main{ public void main(String[] args){ Cat cat = new Cat(); cat.say(); } } class Animal{ public static void say(){ System.out.println("动物发出叫声"); } } class Cat extends Animal{ public void say(){ System.out.pringln("猫发出叫声:喵喵!"); } }
Cat类继承了Animal类,并且重写了Animal中的say()这个方法,当创建Cat类对象去调用这个方法是,会打印出“喵喵!”,