Java Override和@Override
Override : 重写。 当子类的某个方法的方法名、返回值、参数列表均与父类的方法保持一致,我们就可以说子类重写了父类的该方法。
其中需要注意:
- 父类中修饰符为private, static, finnal的方法是无法被子类Override的
- 子类方法的返回值可以是父类方法返回值的子类或一致。例如父类方法返回值为Object类型,子类方法返回值是String,这是OK的
- 子类方法的访问权限修饰符要对父类进行扩展或者一致。例如父类方法由protected修饰,子类方法是public,这是OK的
下面我们就来举个栗子 : 
父类: BaseClass
package test.annotations;
public class BaseClass {
public void dosomething(String str){
System.out.println("Base dosomething: " + str);
}
}
子类: ChildClass
package test.annotations;
public class ChildClass extends BaseClass{
//@Override
public void dosomething(String str){
System.out.println("Child dosomething :" + str);
}
}
测试类: OverrideTest
package test.annotations;
public class OverrideTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
BaseClass base = new ChildClass();
base.dosomething("override");
}
}
如图,测试结果为 :
Child dosomething : override
简单典型的重写栗子。我们做一下修改,把BaseClass类的dosomething方法参数改为Object类型,然后再次运行测试类,结果为:
Base dosomething : override
原因:修改BaseClass方法参数后,dosomething在父类与子类中构不成重写。因此当调用dosomething方法时,检查到父类中有这个方法并且该方法未被子类override,因此调用父类的dosomething方法。
如果我们继续将ChildClass类的dosomething方法之上的注释"//"去掉,就会发现编译器提示出错 :
The method dosomething(String) of type must override or implement a supertype method
原因:此时@Override注释说明dosomething为重写方法,而此方法实际上构不成重写,因此编译器提示错误。删除@Override注释或者在父类中再添加一个dosomething方法以达到构成重写的效果即可。
由上面可见,当我们对父类进行修改时,很有可能会在无法察觉的时候对一些曾经使用重写特性的地方产生影响。这个时候,我们就需要@Override注释了。当你想要在子类中override父类的方法时,请务必加上@Override注释,这样当父类方法有改动时,编译器也会在子类方法处做出相应错误提示,避免人工失误。这是不是也说明一个道理: 错误扼杀在编译阶段,要比在运行时阶段处理好得多。
总结:当你想要在子类中override父类的方法时,请务必加上@Override注释。
分享一篇文章:http://www.journaldev.com/817/overriding-methods-in-java-always-use-override-annotation
Java Override和@Override的更多相关文章
- [JAVA] 重写以及@Override标签
以前JAVA看的少,最近做项目,对@Override的调用顺序有点疑惑,故查了一些资料.既然查资料了,那就把能看到的知识点整理一下,以供日后学习. 原文地址请保留http://www.cnblogs. ...
- Java overload和override的区别分析
Java overload和override的区别分析 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.重写(Overriding)是父类与子类之间多态性 ...
- Maven 项目 @Override must override a superclass method` 问题
问题 Maven 项目 @Override must override a superclass method` 原因 JDK 在1.5以上的版本,才支持@Override 注解 解决方法 (1)po ...
- java中的@Override标签,小细节大作用
转载:http://www.cnblogs.com/octobershiner/archive/2012/03/09/2388370.html 一般用途 ...
- java中的@Override是否需要
java中的重载注解 @Override 是否需要?今天被人问到这个问题,回答的不太好,下来看了一下源码 /** * Annotation type used to mark methods that ...
- java学习笔记----@Override的作用
初学java或多或少都会有这样的疑问,@Override有什么用,有的时候写,有的时候又不写,搞的初学者甚是郁闷. 做了一两年的开发说起这个问题不一定能够对答如流.小弟才疏学浅,花了点时间,看了一下资 ...
- Java面向对象---重写(Override)与重载(Overload)
一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说 ...
- Effective Java 09 Always override hashCode when you override equals
Failure to do so will result in a violation of the general contract for Object.hashCode, which will ...
- Effective Java 10 Always override toString() method
Advantage Provide meaningful of an object info to client. Disadvantage Constrain the ability of chan ...
- java中的@Override标签
@Override标签的作用: @Override是伪代码,表示方法重写. @Override标签的好处: 1.作为注释,帮助自己检查是否正确的复写了父类中已有的方法 2.便于别人理解代码 3.编译器 ...
随机推荐
- 初识yeoman
最近开始新项目,在项目构建上面寻找合适的东西,grunt,bower到发现yeoman;学习了下,把一些东西记录下来然留着以后用. 1.什么是Yeoman Yeoman是Google的团队和外部贡献者 ...
- shopxx----权限添加
shiro权限控制 一.角色管理请求地址 1.模板地址 /shopxx/WebContent/WEB-INF/template/admin/role/list.ftl shiro 权限拦截 配置安全管 ...
- 使用NSKeyedArichiver进行归档、NSKeyedUnarchiver进行解档
一.使用archiveRootObject进行简单的归档 使用NSKeyedArichiver进行归档.NSKeyedUnarchiver进行接档,这种方式会在写入.读出数据之前对数据进行序列化.反序 ...
- 程序运行时 0xC0000005: 读取位置 0x00000000 时发生访问冲突 ,可能是 com 组件引入各种问题
在使用com组件事,可能引入很多不是问题的问题,比如CString 定义出运行时出错等等,这些问题解决的办法就是初始化组件 然后释放组件, 在使用组件时,如果仅仅用在按钮事件或者别的mfc 对话框类里 ...
- 码云平台, Git提交需要输入用户名/密码, 怎么办
这是因为, 检出代码的时候, 使用了http的方式: 那么, 改为ssh的地址就行了
- python生成百分数
>>> a = float(5.69875) >>> b = float(8.49385) >>> print a/b 0.67092661160 ...
- 名义人均GDP的背后,中国真实的人均GDP是1.2万美元!(中国GDP含金量较高)
来源:天涯社区 根据IMF(国际货币基金组织)在今年4月的报告,2014年份中国人均GDP为7600美元,在185个国家当中排行第78位. 然而,根据楼主在国外行走多年的经验,巴西.墨西哥.马来西亚. ...
- java配置文件properties,yml,一般文件
JAVA编写配置文件的几种方式: JAVA配置文件,一般都放在resource目录下,无论是下面提到的properties.yml还是普通的txt等文件. 在打成jar包之后,只需要jar包程序就可运 ...
- 【vim使用】
nano,与vim相似的一个文本编辑工具,在git merge时默认使用 https://www.vpser.net/manage/nano.html 这里介绍一下如何退出nano 按Ctrl+X 如 ...
- java反射基础知识(二)
1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象 ...