java中重载与覆盖

什么是重载?
重载(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
姓名是:高飞
*/

总结:使用重载能够同时解决参数类型不同,参数个数不同的,参数顺序不同的问题。

重载的规则

  1. 在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)。
  2. 不能通过访问权限、返回类型、抛出的异常进行重载。
  3. 方法的异常类型和数目不会对重载造成影响。

覆盖的案例:

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方法是私有的,那么在子类中是不能继承这个方法的,同时在对他重写时,也只是创建了一个新的方法,不构成覆盖。

覆盖的规则:

  1. 重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载。
  2. 重写方法的访问修饰符一定要大于被重写方法的访问修饰符.
  3. 重写的方法的返回值必须和被重写的方法的返回一致。
  4. 重写的子类只能比父类抛出更少的异常。
  5. 静态方法不能被重写,可以被重载。

来一波,推送吧!
群号:781121386
群名:人生苦短,我学编程
欢迎大家加入我们,一起交流技术!!!

发布了38 篇原创文章 · 获赞 128 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lujiangyang123/article/details/103439115
今日推荐