目录
1.方法的重载
什么是方法的重载?
1. 在一个类中有两个或多个方法,他们具有相同的名字,但有不同的参数列表(个数、类型、顺序)。
2.方法重载是实现多态的一种方法。
为什么要方法重载?
解决同一种功能的多个方法,因为参数列表不同,带来的方法名称不同的问题。节约了标识符
方法重载判断原则:
“两同一不同”:
两同:同类中;方法名相同。
一不同:方法参数列表不同(参数类型、参数个数、参数顺序);
只要参数类型、参数个数、参数顺序有一个不同、参数列表就不同。
方法重载与返回值类型无关,只是一般要求返回值类型一致。
代码如下:
public class MaxDemo {
public static void main(String[] args) {
System.out.println("3和4的最大值是:" + max(3, 4));
System.out.println("3.1和5.2的最大值是:"+ max(3.1, 5.2));
System.out.println("3.2、9.4和5.1三个数的最大值是:" + max(3.2, 9.4, 5.1));
}
//定义一个返回值为整型的比较大小值的方法
public static int max(int num1, int num2) {
if (num1 > num2) {
return num1;
}else {
return num2;
}
}
//定义一个返回值为double型的比较大小值的方法
public static double max(double num1, double num2) {
if (num1 > num2) {
return num1;
}else {
return num2;
}
}
//定义一个返回值为double型的比较大小值的方法
public static double max(double num1, double num2, double num3){ {
return max(max(num1, num2), num3);
}
}
}
上述程序中创建了三个方法的程序。第一个方法求最大整数,第二个方法求最大双精度数,而第三个方法求三个双精度数中的最大值。这三个方法都被命名为max。这就是方法的重载。上述程序中,因为定义的是静态的方法,而且在同类中,所以不需要调用,直接使用就可以了。
当调用 max(3,4)时,调用的是求两个整数中较大值的 max 方法。当调 用max(3.1,5.2)时,调用的是求两个双精度数中较大值的 max 方法。当调用 max(3.2, 9.4, 5.1)时,调用的是求三个双精度数中最大数的 max 方法。
构造方法的重载
构造方法也可以重载,要求使用不同的参数个数,不同的参数类型,不同的参数类型顺序。
代码如下:
public class Person {
String name;
int age;
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person(int age) {
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
2.方法的重写
如果子类方法与父类方法同名,则不能继承。子类方法称为重写(覆盖)了父类中的那个方法。
方法重写的语法规则: 返回值类型、方法名、参数类型、顺序、个数都要与父类继承的方法相同。
方法重写的应用场合:
- 子类中实现与父类相同功能,但采用不同的算法或公式
- 在名字相同的方法中,要做比父类更多的事情
- 在子类中需要取消从父类继承的方法
判断方法重写的必杀技: @Override:若方法时重写方法,在方法前写上该关键字,编译通过,否则,编译将报错
代码如下:
创建一个父类,进行自我介绍。
public class Father {
public void show() {
System.out.println("我是爸爸,今年40岁了。");
}
}
创建一个子类,不重写父类的自我介绍方法时
public class Son extends Father {
// @Override
// public void show() {
// System.out.println("我是儿子,今年18岁了。");
// }
}
创建测试类:
public class Text {
public static void main(String[] args) {
Son s= new Son();
s.show();
}
}
执行结果为:
当重写父类的show方法时:
public class Son extends Father {
@Override
public void show() {
System.out.println("我是儿子,今年18岁了。");
}
}
再次测试时:
重写也是实现多态的一种的方法。同一种方法拥有不同的形态。
3.方法重写PK方法重载
方法重写 | 方法重载 |
在满足继承关系的子类中(在不同的类中) | 在同一个类中 |
方法名、参数个事故、顺序、类型与父类相同,返回值相同 | 方法名相同 |
访问修饰符的限定范围大于等父类方法 | 参数个数、顺序、类型不同(有一个不同就可以) |
返回值类型、访问修饰符任意 |
注意:方法称谢存在;属性重写不存在。
4.访问修饰符
修饰符 | 本类 | 同包 | 子类 | 其他 |
private | ✔ | ❌ | ❌ | ❌ |
默认 | ✔ | ✔ | ❌ | ❌ |
protected | ✔ | ✔ | ✔ | ❌ |
public | ✔ | ✔ | ✔ | ✔ |
补充:
final修饰的方法可以重载