什么是重载?
重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同。
什么是覆盖?
覆盖(Override)是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小,被覆盖的方法不能是 private 的,否则只是在子类中重新定义了一个新方法。
重载的案例:
package exercise;
public class information {
public void method(String name) {
System.out.println("姓名是:"+name);
}
public void method(int age) {
System.out.println("年龄是:"+age);
}
public void method(String name,int age) {
System.out.println("姓名是:"+name);
System.out.println("年龄是:"+age);
}
public void method(int age,String name) {
System.out.println("年龄是:"+age);
System.out.println("姓名是:"+name);
}
public static void main(String[] args) {
new information().method("高飞");
new information().method(18);
new information().method("高飞",18);
new information().method(18,"高飞");
}
}
/*
运行结果:
姓名是:高飞
年龄是:18
姓名是:高飞
年龄是:18
年龄是:18
姓名是:高飞
*/
总结:使用重载能够同时解决参数类型不同,参数个数不同的,参数顺序不同的问题。
重载的规则:
- 在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)。
- 不能通过访问权限、返回类型、抛出的异常进行重载。
- 方法的异常类型和数目不会对重载造成影响。
覆盖的案例:
package exercise;
public class animal {
public void run() {
System.out.println("动物会跑");
}
public void eat() {
System.out.println("动物会吃饭");
}
private void breath() {
System.out.println("动物会呼吸");
}
}
package exercise;
public class fish extends animal{
public void run() {
System.out.println("鱼在水里游");
}
public void breath() {
System.out.println("鱼在水里呼吸");
}
}
package exercise;
public class main_x{
public static void main(String[] args) {
var f=new fish();
f.run();
f.eat();
f.breath();
}
}
/*
运行结果:
鱼在水里游
动物会吃饭
鱼在水里呼吸
*/
总结:代码中的animal父类中的breath方法是私有的,那么在子类中是不能继承这个方法的,同时在对他重写时,也只是创建了一个新的方法,不构成覆盖。
覆盖的规则:
- 重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载。
- 重写方法的访问修饰符一定要大于被重写方法的访问修饰符.
- 重写的方法的返回值必须和被重写的方法的返回一致。
- 重写的子类只能比父类抛出更少的异常。
- 静态方法不能被重写,可以被重载。
来一波,推送吧!
群号:781121386
群名:人生苦短,我学编程
欢迎大家加入我们,一起交流技术!!!