java中方法的重写与重载的区别
重载: 方法名相同,但是参数必须有区别(参数不同可以使类型不同,顺序不同,个数不同)。
前提:
同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载
参数列表不同指参数的类型,参数的个数,参数的顺序至少一项不同
方法的返回值类型,方法的修饰符可以不同。
重写(又叫覆盖): 子类继承父类的方法,并重新实现该方法。
方法重写使用注意事项:
1.方法重写时,必须存在继承关系
2.方法重写时,方法名和形式参数必须一致。
3.方法重写时 ,子类的权限修饰符需要大于或等于父类的权限修饰符。
4.方法重写时 ,子类的返回值类型必须小于或等于父类的返回值类型
5.方法重写时 , 子类的异常类型要小于等于父类的异常类型。
在这里面主要拿第三点来测试:
1 public class a{ 2 public static class People 3 { 4 public void fun(){}; 5 } 6 static class Student extends People 7 { 8 protected void fun(){ 9 System.out.println("dfdfd"); 10 } 11 } 12 public static void main(String[] args){ 13 Student p = new Student(); 14 p.fun(); 15 } 16 }
编译就报错了,如图:
原因是父类的方法的权限是public ,而子类改为protected,降低了权限,所以只能大于或等于如:
1 public class a{ 2 public static class People 3 { 4 protected void fun(){}; 5 } 6 static class Student extends People 7 { 8 public void fun(){ 9 System.out.println("dfdfd"); 10 } 11 } 12 public static void main(String[] args){ 13 Student p = new Student(); 14 p.fun(); 15 } 16 }
运行成功,如图: