JAVA学习——重写、重载、重构

今晚看final方法,结果差点被JAVA继承部分的重写、重构、重载搞疯了,记录一下可别再忘记了。。。

一、重写(覆盖)

就是子类继承父类后,可以重写父类的方法,要求是

(1)方法名、参数列表相同

(2)权限修饰符只能从private—>protected—>public变大,很明显嘛你父类都是public公开了,你子类不可能自私地private起来不让后面继承的子类用吧?

(3)返回值可以不同(基于J2SE5.0以上的新内容,慎用)

大概就是这三点,更具体的看这张图,来源https://www.runoob.com/java/java-override-overload.html
在这里插入图片描述

二、重构

这个最好记了,特殊的重写方法,就是方法名返回值参数类型和个数完全相同,就是方法实现内容不同。大概是这样子?

class base{
	
	public void f()
	{
		System.out.print("this is base");
		
	}
	
}


class one extends base{
	
	public  void  f()
	{
		System.out.println("one ");
		
	}
}

三、重载

(1)方法名字相同
(2)返回值可以不同
(3)参数必须不同(顺序不同也可以)

这个涉及到多态那里的内容,先大概记住。

。丑陋的换行符

然后是搞清楚,子类继承父类后,父类的private和final方法是无法被重写的,但是有点不同。

(1)private方法无法被重写

这里我理解是已经默认不能重写,但是如果硬是在子类里面试图编写和父类的private方法并且重写,编译器并不会报错,它是默认两个完全独立无关的方法

class base{
	private void f()
	{
		System.out.print("this is base");
	}
}

class one extends base{
	//或者这里修改权限修饰符为public,还是不会报错
	private int f()
	{
		int i=1;
		System.out.println("one ");
		return i;
	}
	

(2)final方法无法重写

这里神奇的事情就发生了,我先写好一个正常的父类和子类,父类有个protected方法,然后在子类中重写这个方法并把修饰符改为public,是重写吧?是不是,是的吧?但是我把父类方法改成final,哎就不行了

class base{
	
	protected final void f()
	{
		System.out.print("this is base");
		
	}
	
}

class one extends base{
	//这里是会报错的,提示“不能覆盖base中的final方法”
	public  void  f()	
	{
		System.out.println("one ");
		
	}
}

what?wtf?所以我觉得可能是private和final处理的方式不一样吧,书上也没细讲,直接就略过了,我也就暂时这样理解吧,以后实践中有发现再回来改。

题外话:这里尝试了一下重写里面的修改返回值类型,果然还是不会呢嘻嘻,书上也不讲清楚一点mmp

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值