重载与重写的区别

重载

重载是一组功能的集合,增加了程序的灵活性和可读性

重载发生在编译期,在同一个类中根据不同的传参,执行不同的逻辑处理。

以下是关于重载的特点:

1.重载发生范围在同一个类中
2.方法的参数列表必须不一致(类型,个数,顺序不同)

错误示例

public class Test01 {
	//方法的参数列表必须不一致(类型,个数,顺序不同)
	
	//错误1.参数类型相同
	public void dosth01(String str) {	  //报错
		
	}
	public void dosth01(String str01) {		//报错
		
	}
	//错误2.参数顺序相同
	public void dosth01(String str,int i) {		//报错
		
	}
	public void dosth01(String str,int i) {     //报错
	
	}
}

正确示例

public class Test01 {
	//方法的参数列表必须不一致(类型,个数,顺序不同)
	public void dosth01(String str) {
		
	}
	public void dosth01(int i) {
		
	}
	public void dosth01(String str,int i) {
		
	}
	public void dosth01(int i,String str) {
		
	}
}
3.方法的返回值和访问修饰符可以不同(与返回值和访问修饰符无关)
public class Test01 {
	// 方法的参数列表必须不一致(类型,个数,顺序不同)

	//返回String类型
	public String dosth01(String str) {
		return str;
	}
	//返回int类型
	public int dosth01(int i) {
		return i;
	}
	//访问修饰符为protected
	protected void dosth01(String str, int i) {

	}
	//访问修饰符为public
	public void dosth01(int i, String str) {

	}
}
4.构造方法可以重载
public class Test02 {
	//构造方法可以重载
	//类的无参构造和有参构造相当于是一个重载
	public Test02(){

	}
	public Test02(int num,String str) {
		
	}
	public Test02(String str) {
		
	}
}

构造方法会发一个详细的详解,大家不要着急

重写

父类中的方法无法满足子类的要求时,需要重写父类的方法。

对于一个子类对象,当调用的方法子类中存在则调用子类的方法,若子类没有,则调用父类的方法。

在一个方法前一行添加@Override(eclipse快捷键在@后使用 Alt+/),用于检查当前方法是否符合重写

重写发生在运行期,子类对父类方法的内部逻辑重写改造,外部定义不能改变。

1.重写范围发生在子类中

子类对父类方法的重写

2.参数列表必须与父类方法一致
//父类
public class Test03 {
	public void dosth(int i, String str) {

	}
}

//子类
class Test04 extends Test03 {
	@Override
	public void dosth(int i, String str) {
		System.out.println("子类对父类dosth方法的重写");
	}
}
3.方法名,参数列表必须相同,抛出的异常范围小于等于父类

异常随后会补

4.子类返回值类型小于等于父类返回值类型
import java.util.ArrayList;
import java.util.List;
//List的返回值类型大于ArrayList的返回值类型
public class Test07 {
	//返回值类型List
	public List dosth01() {
		return null;
	}
}
class Test08 extends Test07{
	@Override
	//返回值类型ArrayList
	public ArrayList dosth01() {
		return null;
	}
}
5.子类的访问修饰符大于等于父类
//父类
//访问修饰符:public(范围最大),private(范围最小)
public class Test03 {
	//访问修饰符protected
	protected void dosth(int i, String str) {

	}
}

//子类
class Test04 extends Test03 {
	@Override
	//访问修饰符public
	public void dosth(int i, String str) {
		System.out.println("子类对父类dosth方法的重写");
	}
}
6.如果父类的访问修饰符为private/final/static,则该子类就不能重写父类的方法
//父类
public class Test05 {
	//private修饰的方法
	//私有化,只能在当前类中使用,子类看不到
	private void dosth01() {
		
	}
	//final修饰的方法
	//final修饰的方法表示该方法不可被重写(可以重载,可以继承)
	public final void dosth02() {
		
	}
	//static修饰的方法
	public static void dosth03() {
		
	}
}
//子类
class Test06 extends Test05{
	
	//报错
	//private修饰的方法不能被重写
	@Override
	private void dosth01() {
		
	}
	//报错
	//final修饰的方法不能被重写
	@Override
	public final void dosth02() {
		
	}
	//报错
	//static修饰的方法不能被重写
	@Override
	public static void dosth03() {
		
	}
}
7.构造方法不能被重写
//父类
public class Test05 {
	//父类无参构造
	public Test05() {
		
	}
}
//子类
class Test06 extends Test05{
	
	//报错
	@Override
	public Test05() {
		System.out.println("子类不能重写父类的构造方法");
	}
}

以上就是重载与重写的全部内容,如有不当请大家多多指正。

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值