一、方法重载
- 方法重载的基本介绍
java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致。 - 方法重载的好处
-
- 减轻了起名的麻烦
-
- 减轻了记名的麻烦
-
- 举例
- 比如:System.out.println(),它就是一个重载方法,你可以输出很多不同的数据,out是PrintStream类型的对象。
代码:
public class overLoad01 {
public static void main(String[] args) {
System.out.println(100);//100
System.out.println("你好");//你好
System.out.println(1.1);//1.1
}
}
快速入门:
方法:calculate
calculate(int n1,int n2)// 两个int的和
calculate(int n1,double n2)// 一个int和一个double的和
calculate(double n1,int n2)// 一个double和一个int的和
calculate(int n1,int n2,int n3)// 三个int的和
代码:
public class overLoad02 {
public static void main(String[] args) {
MyCalculate myCalculate = new MyCalculate();
System.out.println(myCalculate.calculate(10,20));
System.out.println(myCalculate.calculate(10,3.5));
System.out.println(myCalculate.calculate(9.4,10));
System.out.println(myCalculate.calculate(10,3,5));
}
}
class MyCalculate{
// 下面四个方法构成方法重载
// 两个int的和
public int calculate(int n1,int n2){
System.out.println("两个int和");
return n1+n2;
}
// 一个int和一个double的和
public double calculate(int n1,double n2){
System.out.println("一个int和一个double和");
return n1+n2;
}
// 一个double和一个int的和
public double calculate(double n1,int n2){
System.out.println("一个double和一个int");
return n1+n2;
}
// 三个int的和
public int calculate(int n1,int n2,int n3){
System.out.println("三个int和");
return n1+n2+n3;
}
}
运行结果:
两个int和
30
一个int和一个double和
13.5
一个double和一个int
19.4
三个int和
18
- 方法重载的注意事项和细节
-
- 方法名:必须相同
-
- 形参列表:(形参的类型或者它的个数或者它的顺序,至少有一样不同)
-
- 返回类型:无要求
-
二、方法重写
- 子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
- 方法重写的应用场景:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
- 方法重写和重载的区别:
- 方法重写:子类和父类出现了一摸一样的方法声明(方法名、参数类表、返回值类型)
- 方法重载:在同一个类中,方法名相同,参数列表不同,与返回值无关
- 方法重写的注意事项:
- 私有方法不能被重写(父类私有成员子类是不能继承的)
- 子类方法访问权限不能更低(public > protected > default > private)
- 父类中的静态方法不能被重写,如果子类也有相同的方法,并不是重写的父类的方法,而是将父类同名的方法隐藏了起来。
三、可变参数
- 基本概念:java允许将同一个类中的多个同名同功能但参数个数不同的方法,封装成一个方法。
- 基本语法
访问修饰符 返回类型 方法名(数据类型...形参名){
}
- 快速入门:类Method,方法sum【计算2个数的和,3,4,5,6…】
public class varParameter01 {
public static void main(String[] args) {
Method method = new Method();
System.out.println("和="+method.sum(1,2,3,4,5));//15
System.out.println("和="+method.sum(1,2,5));//8
}
}
class Method{
// 可以计算两个数的和,3个数的和,4,5,...
// 1. 可以使用方法重载
// 2. 第一种太麻烦了,所以我们可以使用可变参数
// 解读:
// 1. int...表示接收的是可变参数,类型是int,即可以接收多个int参数
// 2. 使用可变参数时,可以当作数组来使用,即nums 可以当作数组
// 3. 遍历nums 求和即可
public int sum(int... nums){
int res=0;
for (int i=0;i< nums.length;i++){
res+=nums[i];
}
return res;
}
}
- 注意事项和使用细节
-
- 可变参数的实参可以为0个或者任意个
-
- 可变参数的实参可以为数组
-
- 可变参数的本质就是数组
-
- 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在参数列表的最后
-
- 一个形参列表中只有出现一个可变参数
-
public class VarparameterDetail {
public static void main(String[] args) {
// 细节:可变参数的实参可以为数组
int[] arr={1,2,3,4};
T t = new T();
t.f1(arr);
}
}
class T{
public void f1(int... nums){
System.out.println("长度="+nums.length);
}
// 细节:可变参数可以和普通类型的参数一起放在形参列表,
// 但必须保证可变参数在参数列表的最后
public void f2(String str,double... nums){
}
}