转载:http://www.cnblogs.com/octobershiner/archive/2012/03/09/2388370.html

一般用途

帮助自己检查是否正确的复写了父类中已有的方法

告诉读代码的人,这是一个复写的方法

比如我们有如下基类

1 package fruit;

2 /**

3 * @author Octobershiner

4 */

5 public class Fruit {

6

7 public void show_name(int num){

8 System.out.println("Fruit: "+mum);

9 }

10

11 public static void main(String[] args) {

12 // TODO code application logic here

13 Fruit apple = new Apple(); //generate a kind of new fruit

14 apple.show_name(2);

15 }

16 }

之后我们编写一个Apple子类,继承这个基类。并且复写基类中的show_name()方法。

1 package fruit;

2

3 public class Apple extends Fruit{

4

5

6 @Override

7 public void show_name(int num){

8 System.out.println("Apple");

9 }

10 }

执行的结果,显而易见就是会打印出Apple:2字样。

其实,在我们手工复写父类的方法时,容易把方法的参数记错,如果此时不加@Override的话,编辑器就不会提示你:例如我们不加这个标签,悄悄的把参数改为float型。

这个时候,其实我们并没有按照我们的意图成功复写方法,于是一个隐藏的bug就这样诞生了,相反加上Override的效果就是

IDE给出了错误提示,说明我们复写方法失败。

往往就是我们准备复写方法的时候结果,相反我们是重载了方法。

Bruce的 一个思考

《Thinking in java》的作者Bruce在讨论这个问题的时候,提到了一个问题就是override私有的方法的例子:

现在我们向Fruit类中添加一个私有方法,而在Apple中尝试复写

1 @Override

2 private void grow(){

3 }

结果编译器会提示错误,这是一个非常低级的错误,但是有时候恰恰就不会被我们发现:那就是试着复写私有方法,但是当我们去掉Override标签的时候,编译器是不会报错的,而且可以执行。

其实Apple中的你所谓复写的grow只是一个针对于Apple本身的私有方法。完全是一个新的方法。

这就引出了一个问题,何为复写?

在面向对象中,只有接口和共有方法,继承方法才有复写,私有方法不可以复习,但是又想了一下,才明白:不是不可以复习而是,根本就不存在复写私有方法的概念!

这正是面向对象设计的初衷,私有方法本身就是为了封装在类内部,不希望别人来更改或者外部引用的,看到这里,忽然觉得,java设计的还真是不错,感觉到了思想和实现的统一。

以前总觉得override标签可有可无,但没想到会引出这么多的问题,于是乎得到一个启示:认真思考每一个语法细节的意义,思行合一,文章的最后膜拜一下Bruce.

java overide_java中的@Override标签,小细节大作用相关推荐

  1. [html] html5中的meta标签renderer有什么作用?

    [html] html5中的meta标签renderer有什么作用? 指定双核浏览器,默认以什么浏览器方式渲染页面 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎 ...

  2. [html] html5中的meta标签robots有什么作用?

    [html] html5中的meta标签robots有什么作用? 禁止搜索引擎对本页面内容进行收录,不会出现在SRP页面上 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很 ...

  3. java中的@Override标签

    本文章转载自:https://www.cnblogs.com/ttzz/p/8455325.html @Override标签的作用: @Override是伪代码,表示方法重写. @Override标签 ...

  4. java web中jsp常用标签

    在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服. JSTL主要提供了5大类标签库:1 ...

  5. java输出中写html标签,java 输出html标签

    java 输出html标签 [2021-02-01 07:37:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  6. PCB设计中容易忽视的小细节 一分钟帮你总结

    PCB设计是一份严谨.仔细的工作.在PCB设计过程中有非常多的小细节,一些个小细节如果是没有注意好的话,极大可能会影响整个PCB的性能,乃至决定整个产品的成败. PCB布局规范细节 1.在开关电源高压 ...

  7. 晶振PPM小参数,大作用

    大家都知道电子元件是电路设计中一个很关键的所在,电路的精准直接关乎使用这颗晶振的产品的质量问题,但是最重要的体现在于一个小参数那就是晶振的PPM值,即精度电容值.精度值越低表明这颗电子元件越精度越精确 ...

  8. c语言找等位线坐标,C语言小技巧大作用

    减少不必要的BAK文件 当使用TC默认配置时,会产生大 量的*.bak文件.因为按照TC默认 设置,修改某个C文件后,将生成 同名的*.bak备份文件,该类文件 的存在没多大作用.解决办法是 把Opt ...

  9. 第八十一期:Java性能优化:35个小细节,提升你的Java代码运行效率

    如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效 ...

最新文章

  1. 查看计算机用户修改密码时间,使用ldap语句查询某时间后没改密码的用户
  2. 4-4:TCP协议之TCP头部格式详解
  3. java 控制 sortedset_Java集合的checkedSortedSet()方法和示例
  4. springboot与docker整合
  5. android gdb gdbserver
  6. webots使用以及第三方模型导入装配、运动学仿真教程
  7. 软件安装及软件包管理
  8. 局域网的分类:以太网、令牌环网、FDDI、ATM、WLAN
  9. C#人事工资管理系统
  10. AI“独角兽”排队上市,但属于AI公司的胜利还没有到
  11. echarts 柱状图圆柱_手把手教你用ECharts画柱状图
  12. 第九章:深度学习平台及框架
  13. 微信小程序加盟需要注意什么?
  14. 关于maven更新超时问题显示报错
  15. 比正则快M倍以上!Python替换字符串的新姿势
  16. HTMLcss怎样让文字覆盖在图片上面,图片上加字
  17. Linux的ip设置
  18. layout_constraintDimensionRatio中 H与W的区别
  19. 【算法】【华为】2019华为笔试 找终点:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数,
  20. 数据库系统概论期末复习二、关系数据库

热门文章

  1. delphi 获取文件所在路径、文件名、扩展名等
  2. 你的选择:学习的不同境界--转自《开复学生网》
  3. Unity学习笔记:UGUI相关知识
  4. 系统自带邮件添加163、学生edu邮箱@stu.hebut.edu.cn【Mac】
  5. 指数供应商MSCI明晟宣布提高A股在全球指标权重
  6. boot2docker v17.03-ce 下载
  7. 从泰勒公式到立方根的近似计算
  8. How to Write a Research Proposal
  9. Tampermonkey插件开发-0001
  10. qrcode不显示二维码