方法重载:如果一个类有多个名字相同但参数个数、类型、(类型)顺序不同的方法。
方法重写:如果子类具有和父类一样的方法(参数相同、返回类型相同、方法名相同,但方法体可能不同)。方法重写用于提供父类已经声明的方法的特殊实现,是实现多态的基础条件。
目录
- 1、方法重载
- 改变参数的数目:
- 通过改变参数类型,也可以达到方法重载的目的
- 还可以通过改变参数类型顺序达到目的
- 2、方法重写
- 3、二者区别
- 4、 总结
1、方法重载
在 Java 中,有两种方式可以达到方法重载的目的。
改变参数的数目:
public class OverloadingByParamNum {
public static void main(String[] args) {
System.out.println(Adder.add(10, 19));
System.out.println(Adder.add(10, 19, 20));
}
}
class Adder {
static int add(int a, int b) {
return a + b;
}
static int add(int a, int b, int c) {
return a + b + c;
}
}
通过改变参数类型,也可以达到方法重载的目的
public class OverloadingByParamType {
public static void main(String[] args) {
System.out.println(Adder.add(10, 19));
System.out.println(Adder.add(10.1, 19.2));
}
}
class Adder {
static int add(int a, int b) {
return a + b;
}
static double add(double a, double b) {
return a + b;
}
}
还可以通过改变参数类型顺序达到目的
public class OverloadingByParamType {
public static void main(String[] args) {
System.out.println(Adder.add(19.2, 10));
System.out.println(Adder.add(10, 19.2));
}
}
class Adder {
static double add(double a, int b) {
return a + b;
}
static double add(int b, double a) {
return a + b;
}
}
你们是否也想问main()方法是否可以重载呢?答案肯定的。
毕竟 main() 方法也是个方法,只不过,Java 虚拟机在运行的时候只会调用带有 String 数组的那个 main() 方法。
public class OverloadingMain {
public static void main(String[] args) {
System.out.println("String[] args");
}
public static void main(String args) {
System.out.println("String args");
}
public static void main() {
System.out.println("无参");
}
}
第一个 main() 方法的参数形式为 String[] args,是最标准的写法;第二个 main() 方法的参数形式为 String args,少了中括号;第三个 main() 方法没有参数。
运行结果:
String[] args
2、方法重写
在 Java 中,方法重写需要满足以下三个规则:
- 重写的方法必须和父类中的方法有着相同的名字;
- 重写的方法必须和父类中的方法有着相同的参数;
- 必须是 is-a 的关系(继承关系)。
public class Bike extends Vehicle {
@Override
void run() {
System.out.println("自行车在跑");
}
public static void main(String[] args) {
Bike bike = new Bike();
bike.run();
}
}
class Vehicle {
void run() {
System.out.println("车辆在跑");
}
}
3、二者区别
二者区别经常出现在面试题里~dddd
Java中重写(Override)与重载(Overload)的区别:
- 发生位置
重载:一个类中
重写:子父类中 - 参数列表限制
重载:必须不同的
重写:必须相同的 - 返回值类型
重载:与返回值类型无关
重写:返回值类型必须一致 - 访问权限
重载:与访问权限无关
重写:子类的方法权限必须不能小于父类的方法权限 - 异常处理:
重载:与异常无关
重写:异常范围可以更小,但是不能抛出新的异常
4、 总结
方法重载的注意点: 两同一不同
- ‘两同’:在同一个类,方法名相同;
- ‘一不同’:参数不同。
方法重写的注意点: 两同一小一大
- ‘两同’:方法名相同,参数相同;
- ‘一小’:子类方法声明的异常类型要比父类小一些或者相等;
- ‘一大’:子类方法的访问权限应该比父类的更大或者相等。