Java 重写(Override)与重载(Overload)

重写(Override)

重写就是在子类里去编写父类中的方法(允许子类访问的方法),其重写的方法的返回值和形参都要与父类的一模一样。

方法重写的规则

  1. 重写方法的方法名称、参数列表必须与父类方法的相同,返回类型可以相同,也可以是原类型的子类型。
  2. 重写方法不能比原方法访问性差(即访问权限不允许缩小)。
  3. 被重写的方法不能是final类型,因为final修饰的方法是无法重写的。
  4. 被重写的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足重写条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足重写条件,但是仍然不会发生重写,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
  5. 构造方法不能被重写。
  6. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  7. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。

  • 重写 override 针对方法,必须建立在继承基础之上,
  • 如果子类拥有与父类相同的方法,则子类调用时就会覆盖从父类继承过来的方法
    在这里插入图片描述


People.java

public class People{
    public void eat() {
		System.out.println("People eat");
	}
}

Man.java

public class Man extends People {

//	重写的方法
	public void eat() {
		System.out.println("Man eat");
	}
}

Test.java

public class Test {
	public static void main(String[] args) {    
//		测试重写的方法
		Man laosunMan = new Man();
		laosunMan.eat();
		}
}		

输出结果:
在这里插入图片描述


重载(Overload)

方法重载的原则:

  1. 被重载的方法必须改变参数列表(参数个数或类型不一样);
  2. 被重载的方法可以改变返回类型;
  3. 被重载的方法可以改变访问修饰符;
  4. 被重载的方法可以声明新的或更广的检查异常;
  5. 方法能够在同一个类中或者在一个子类中被重载。
  6. 无法以返回值类型作为重载函数的区分标准。
  • 重载最普遍的运用是输出语句的使用,当参数不同,调用方法不同。
    在这里插入图片描述

People.java

public class People {

//	多个构造方法,也称为重载,因为名字相同,只是参数个数和参数类型不同。
	
//	求和
	
//	2个数和
	public int sum(int value1, int value2) {
		return value1 + value2;
	}
	
//	3个数和
	public int sum(int value1, int value2, int value3) {
		return value1 + value2 + value3;
	}
	
	public double sum(int value1, double value2) {
		return value1 + value2;
	}
}	

Test.java

public class Test {

	public static void main(String[] args) {
		
		People zhangsanPeople = new People();
		
		
//		多态的表现:看起来调用的是相同的方法名,但是根据传递的参数个数不同,将来执行不同的方法。
		
		int resultValue1  = zhangsanPeople.sum(1, 2);
		int resultValue2  = zhangsanPeople.sum(1, 2, 3);
		
//		根据传递的类型,执行的是不同的方法。
		double resultValue3 = zhangsanPeople.sum(1, 2.0);
		
				
		System.out.println(resultValue1);
		System.out.println(resultValue2);
		System.out.println(resultValue3);
		
	}
}

输出结果:
在这里插入图片描述

注:

多态的表现:看起来调用的是相同的方法名,但是根据传递的参数个数不同,将来执行不同的方法。

重载、重写都是简单地多态,重载也就是调用方法时的多态。

重载和重写的区别

重写(Override)重载(Overload)
方法名一样,返回类型一样方法名一样,返回类型不一样
发生在继承中在一个类中
参数类型相同参数类型或个数不同
被重写的方法不能拥有比父类更加严密的权限无要求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值