java中的方法覆盖

Posted 垚垚是小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的方法覆盖相关的知识,希望对你有一定的参考价值。

方法覆盖

2.1、什么时候考虑使用方法覆盖?
	父类中的方法无法满足子类的业务需求,子类有必要对继承过来的方法进行覆盖。

2.2、什么条件满足的时候构成方法覆盖?
	第一:有继承关系的两个类
	第二:具有相同方法名、返回值类型、形式参数列表
	第三:访问权限不能更低。
	第四:抛出异常不能更多。

2.3、关于Object类中toString()方法的覆盖?
	toString()方法存在的作用就是:将java对象转换成字符串形式。
	大多数的java类toString()方法都是需要覆盖的。因为Object类中提供的toString()
	方法输出的是一个java对象的内存地址。

	至于toString()方法具体怎么进行覆盖?
		格式可以自己定义,或者听需求的。(听项目要求的。)

2.4、方法重载和方法覆盖有什么区别?
     方法重载发生在同一个类当中。

	方法覆盖是发生在具有继承关系的父子类之间。

	方法重载是一个类中,方法名相同,参数列表不同。

	方法覆盖是具有继承关系的父子类,并且重写之后的方法必须和之前的方法一致:
		方法名一致、参数列表一致、返回值类型一致。

这里还有几个注意事项:(这几个注意事项,当学习了多态语法之后自然就明白了!)

注意1:方法覆盖只是针对于方法,和属性无关。
注意2:私有方法无法覆盖。
注意3:构造方法不能被继承,所以构造方法也不能被覆盖。
注意4:方法覆盖只是针对于实例方法,静态方法覆盖没有意义。

解释之前遗留的问题

私有方法无法覆盖。

方法覆盖只是针对于“实例方法”,“静态方法覆盖”没有意义。(这是因为方法覆盖通常和多态联合起来)

总结两句话:
	私有不能覆盖。
	静态不谈覆盖。

在方法覆盖中,关于方法的返回值类型。
	什么条件满足之后,会构成方法的覆盖呢?
		1、发生具有继承关系的两个类之间。
		2、父类中的方法和子类重写之后的方法:
			具有相同的方法名、相同的形式参数列表、相同的返回值类型。
	
	学习了多态机制之后:
		“相同的返回值类型”可以修改一下吗?
			对于返回值类型是基本数据类型来说,必须一致。
			对于返回值类型是引用数据类型来说,重写之后返回值类型可以变的更小(但意义不大,实际开发中没人这样写。)。

以上是关于java中的方法覆盖的主要内容,如果未能解决你的问题,请参考以下文章

覆盖javascript以消除闪烁

如何识别Java字节码中的覆盖方法?

如何覆盖继承的嵌套类中存在的虚拟方法

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

22.java方法的定义

片段布局不覆盖整个屏幕