java 中方法的重载与重写
重载:
1.方法名不相同,参数不同(同名不同参)
(1).注意:这里的不同参包括(参数类型不同、参数个数不同、参数顺序不同)
(2).返回值类型没有要求(可以是void、int、String等)
(3).修饰符没有要求(可以是public、private等)
2.发生在同一个类中
可以参照下面一段代码进行理解
public class ReLoadAdd { public void add(long a,int b){//add()方法 int c = (int)a+b; System.out.println(c); } //重载add()方法,与add()参数类型不同 private void add(int a,int b){ int c = a+b; System.out.println(c); } //重载add()方法,与add()参数个数不同这里有三个参数 protected void add(long a,int b,int c){ int d = (int)a+b+c; System.out.println(c); } //重载add()方法,与add()参数顺序不同,修饰符为默认 void add(int b,long a){ int c = (int)a+b; } }
重写
1.发生在父子类中,子类对父类的方法进行重写
2.同名并且同参,返回值类型也应相同
3.子类方法的修饰符不能比父类方法的修饰符更封闭(要不和父类修饰符相同,要么比父类修饰符更宽泛)
4.子类抛出的异常类型不能比父类抛出的异常更宽泛
下面写一个ReLoadAdd的子类叫ReWriteAdd,完成对父类add()方法的重写
public class ReWriteAdd extends ReLoadAdd{ // 对父类第一个方法add()的重写,修饰符只能为public如果该没其他的报错,是第三条的印证 public void add(long a,int b){ int c = (int)a+b; System.out.println(c); } // 对父类ReLoadAdd第二个add()方法的重写,父类修饰符为protected,所以子类可以为(protected、public)这里为protected public void add(long a,long b){ long c = a+b; System.out.println(c); } // 对父类ReLoadAdd第三个add()方法的重写,父类修饰符为protected,所以子类可以为(protected、public)这里为protected protected void add(long a,int b,int c){ int d = (int)a+b+c; System.out.println(d); } }