JAVA中方法的重载与重写
1. 重载
简单来说就是方法名相同但是可以完成的功能不同,并且重载是发生在同一个类中。
方法重载与下列因素相关:
- 参数个数不同
- 参数类型不同
- 参数的多类型顺序不同
方法重载与下列因素无关:
- 与参数的名称无关(参数名字叫什么无所谓,只要是合法字符即可)
- 与方法的返回值类型无关
下面看一下具体的代码例子
- 参数的个数不同(print的方法其实就是一个很好的方法重载例子)
- 这几个方法中虽然方法名一样,但是每个方法的参数确不一样,所以形成方法的重载。
public int test01(int a){
System.out.println("一个参数...");
return a;
}
public int test01(int a, int b){
System.out.println("二个参数...");
return a + b;
}
public int test01(int a, int b, int c){
System.out.println("三个参数...");
return a + b + c;
}
- 参数类型不同
- 两个方法虽然方法名一样参数个数也一样,但是方法的参数类型不一样,所以同样也形成了方法的重载。
- 同样这两个方法也证明了方法重载与方法的返回值类型无关,一个是int另一个是double
public int test01(int a){
System.out.println("一个参数...");
return a;
}
public double test01(double a){
System.out.println("一个参数...");
return a;
}
- 参数的多类型顺序不同(注意一定要是多类型的,同一个类型的参数是不会发生重载的)
- 方法名一样,参数个数也一样,但是参数的顺序确不一样,所以也形成了方法的重载。
public void test01(int a, double b){
System.out.println("二个参数...");
}
public void test01(double b, int a){
System.out.println("二个参数...");
}
补充
-
思考一个问题,当一个子类A继承了父类B之后,在子类A中再定义一个方法与父类中的存在的方法有有着方法名相同,参数的个数不同。这个情况是属于重载还是重写,如果是方法名相同参数的类型和参数的个数以及参数的顺序相同,并且方法的返回值也相同,但是方法的功能不同,那么整个情况是重写还是重载?
-
答案:
-
重载
重载原因,因为B类继承的A类之后拥有了A类使用的方法
-
重写
-
-
第一个问题重载的示例代码
A类
public class A { public void test01(int a){ System.out.println("A类..."); } }
B类
public class B extends A { public void test01(int a, int b) { System.out.println("B类..."); } public static void main(String[] args) { B b = new B(); b.test01(1); b.test01(1, 2); } }
执行结果:
2. 重写
-
概念:在继承关系当中,方法的名称一样,参数列表也一样。
-
@Override:这个注解不是必须的,但是这个注解可以帮助程序检测当前这个方法是否重写了父类中的方法。
-
代码示例:
// 父类A public class A { public void test01(int a){ System.out.println("A类..."); } }
// 子类B public class B extends A { @Override // 检测注解 public void test01(int a) { System.out.println("重写了A类中的方法..."); } }
3. 重载与重写的区别
- 重写(Override):方法的名称一样,参数列表【也一样】。覆盖、覆写,发生在不同类中。
- 重载(Overload):方法的名称一样,参数列表【不一样】,发生在同一个类中。