Java覆盖(重写)和重载的区别

一、覆盖

(1)什么时候需要方法覆盖?

有一些方法,子类对父类的实现是不满意的。子类有权利对这个方法进行重写编写,有必要进行“方法的覆盖”。

方法覆盖又叫做:方法重写,英语单词叫做:Override,OverWrite。所以也叫方法覆盖,方法重写。

(2)方法覆盖怎么实现?

class Animal{
}
class  Cat extends Animal{
}

(3)在我们代码怎么编写的时候,在代码级别上怎么构成了方法覆盖呢?

(a)构成了继承关系。

(b)重写之后的方法和之前的方法具有相同的方法名,相同的形式参数列表,相同的返回值。

(c)访问权限不能更低,可以更高。

(d)重写之后的方法不能比之前的方法抛出更多的异常,可以更少。

(4)方法覆盖的注意事项?

(a)方法覆盖只是方法,和属性没有关系。

(b)私有方法没有办法覆盖,构造方法不能继承,所以也不能覆盖,静态方法只是针对实例方法,静态方法覆盖也没有意义。

(5)方法覆盖的经典案例

public class OverrideTest
{
	public static void main(String [] args){
		ChinaPeople p1 = new ChinaPeople();
		//p1.name ="提高班";
		p1.setName("提高班");
		p1.speak();
		AmercainPeople p2 = new AmercainPeople();
		//p2.name ="提高班";
		p2.setName("improve Class");
		p2.speak();
	}
}
class People
{
	private String name;
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}
	public void speak(){
		System.out.println(this.name +"正在说话");
	}
}
class ChinaPeople extends People
{
	//public ChinaPeople(String name){
		//super();
	//}
	public void speak(){
		System.out.println(this.getName() +"正在说中国话");
	}
}
class AmercainPeople extends People
{
	//public AmercainPeople(String name){
		//super();
	//}
	public void speak(){
		System.out.println(this.getName() +"Speaking English");
	}
}

二、重载

(1)什么时候会考虑方法重载?

在同一个类当中,如果"功能1"和"功能2"他们的功能是相似的,那么可以考虑将他们的方法名一致,这样代码既美观,又便于后期的代码编写。

扫描二维码关注公众号,回复: 11437588 查看本文章

(2)什么时候代码会发生方法重载?

条件1:在同一个类当中。

条件2:方法名相同

条件3:参数列表不同

参数的个数不同算不同,参数的类型不同算不同,参数的顺序不同算不同。

(3)方法重载和返回值类型没有关系,同时也和修饰符列表没有关系。

三、方法重载和重写的区别?

(1)本质不一样

重写:子类去重写父类的方法,首先需要有继承,然后因为父类的方法不满足当前的需求了才会发生方法的重写。

重载:在同一类中,如果两个方法的功能类似,就可以实现方法的重载。

(2)语法不同

重写:要求在不同类中,方法名、形式参数、返回值类型都要要求一样。

重载:要求在不同的类中,方法名一样,参数列表不同(参数的个数不同算不同,参数的类型不同算不同,参数的顺序不同算不同。)

(3)直接区别

区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做出更严格的限制(可以降低限制)

猜你喜欢

转载自blog.csdn.net/MyxZxd/article/details/105908478