Override : 重写。 当子类的某个方法的方法名、返回值、参数列表均与父类的方法保持一致,我们就可以说子类重写了父类的该方法。

其中需要注意:

  1. 父类中修饰符为private, static, finnal的方法是无法被子类Override的
  2. 子类方法的返回值可以是父类方法返回值的子类或一致。例如父类方法返回值为Object类型,子类方法返回值是String,这是OK的
  3. 子类方法的访问权限修饰符要对父类进行扩展或者一致。例如父类方法由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

最新文章

  1. 深度剖析 | 基于大数据架构的BI应用
  2. VRP介绍以及AC初始化配置-06
  3. [ImportNew]8张图理解Java
  4. 使用CSS修改HTML5 input placeholder颜色( 转载 )
  5. Android Socket 相关
  6. Java多线程编程总结(学习博客)
  7. EF 存储过程(下)
  8. 后缀自动机(SAM) :SPOJ LCS - Longest Common Substring
  9. 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey>
  10. onethink部署时后台登陆的问题
  11. Linux(CentOS6.5)下编译安装Nginx1.10.1
  12. java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离
  13. Kali学习笔记36:AVWS10的使用
  14. Java 之 JavaScript (二)
  15. CSS radial-gradient() 函数实现渐变
  16. .Net使用163smtp发送邮件时错误:邮箱不可用. has no permission解决方法
  17. InnoDB锁问题
  18. [转]查看linux服务器硬盘IO读写负载
  19. express中间件笔记整理
  20. Outlook Font

热门文章

  1. Leetcode-Resotre IP Addresses
  2. 【文章阅读】Java虚拟机系列学习
  3. Apache-ActiveMQ transport XmlMessage
  4. cocos2d 场景切换和弹出场景、收回场景
  5. 两款高性能并行计算引擎Storm和Spark比較
  6. ViewPager学习及使用(一)
  7. JS获取当年当月最后一天日期
  8. JetBrains ReSharper 8.2 Build 8.2.0.2160 && StyleCop
  9. win7开启特定端口
  10. C语言-随机数