@Override标签

一般用途

  • 帮助自己检查是否正确的复写了父类中已有的方法
  • 告诉读代码的人,这是一个复写的方法

比如我们有如下基类

 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 here13         Fruit apple  = new Apple(); //generate a kind of new fruit14         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         @Override2         private void grow(){3         }

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

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

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

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

这正是面向对象设计的初衷,私有方法本身就是为了封装在类内部,不希望别人来更改或者外部引用的。

最后附注重载与重写方法的区别:

方法重载与方法复写的区别

区别 方法重载 方法复写
英文单词 Overloading Override
概念 方法名称相同,参数的个数或者类型不同 方法名称相同,参数的个数和类型相同,方法的访问权限不能更严格
使用范围 发生在同一个类中 发生在继承关系中,是由子类进行复写

@Override标签背后的小秘密---记录java的思行合一(作者:leeon)相关推荐

  1. 分享一下@Override标签背后的小秘密---记录java的思行合一

    无论是在netBeans还是在eclipse开发环境中,写java代码的时候经常会碰到@Override标签,平时只知道是覆盖的意思就好了~那么这个标签的价值就只有这些吗? 最近一次,重翻<Th ...

  2. 为什么强烈推荐Java程序员使用Google Guava编程(思大于行,思行合一)

    目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码! 以面 ...

  3. Java Taste 记录java带给我们的小滋小味

    我个人比较喜欢java语言,在我心中的比重和C各占一半吧,稀疏的时间容不得太细致的总结,但是我还是将自己java以前的点点滴滴记录下来,每一篇文章就像小品文一样吧,希望大家读后能轻松愉快. 这些文章并 ...

  4. java override例子_java经常碰到的@Override标签

    无论是在netBeans还是在eclipse开发环境中,写java代码的时候经常会碰到@Override标签,平时只知道是覆盖的意思就好了~那么这个标签的价值就只有这些吗? 最近一次,重翻<Th ...

  5. java overide_java中的@Override标签,小细节大作用

    转载:http://www.cnblogs.com/octobershiner/archive/2012/03/09/2388370.html 一般用途 帮助自己检查是否正确的复写了父类中已有的方法 ...

  6. java中的@Override标签

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

  7. java技术指标_使用 Micrometer 记录 Java 应用性能指标

    使用 Micrometer 记录 Java 应用性能指标 成 富 2019 年 2 月 13 日发布 运行良好的应用离不开对性能指标的收集.这些性能指标可以有效地对生产系统的各方面行为进行监控,帮助运 ...

  8. 藏在表分区统计信息背后的小秘密

    藏在表分区统计信息背后的小秘密 藏在表分区统计信息背后的小秘密 原创 2017-09-19 曾令军 数据和云 云和恩墨技术专家,8年数据库运维经验.思维敏捷,擅长于数据库开发.解决棘手的数据库故障和性 ...

  9. 日撸 Java 三百行(20 天: 过去10日总结)

    注意:这里是JAVA自学与了解的同步笔记与记录,如有问题欢迎指正说明 目录 · 前言 一.面向对象与面向过程相比, 有哪些优势? 二.比较顺序表和链表的异同 三.分析顺序表和链表的优缺点 四.分析调拭 ...

最新文章

  1. trace分析优化器执行计划 || optimizer
  2. 业界首个机密计算容器运行时—Inclavare Containers正式进入CNCF!
  3. input python_Python input 使用
  4. 【BZOJ】4001: [TJOI2015]概率论
  5. linux和信息资源管理,Linux top命令详解
  6. java 原子量Atomic举例(AtomicReference)
  7. 重磅开源 | 机器学习圣经《模式识别与机器学习》中文版PDF!
  8. MFC将bmp图像设为背景
  9. 学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式
  10. abaqus2017安装后启动cae报错_Abaqus2017安装全过程
  11. java100集视频_上百集课程JAVA区块链开发视频教程
  12. 2022年对于李一男是关键的一年,这也将决定他的社会地位
  13. Qt界面无法切换输入法的解决方法
  14. TCP三次握手中SYN,ACK,Seq含义
  15. C语言实现【小游戏——飞机大战】
  16. Brand.com 总统迈克·扎姆托说,勒索企图的受害者
  17. 深圳梅林中学2021年高考成绩查询,2019深圳梅林中学中考录取分数线是多少
  18. 【存货系列】JS文字转语音方案设计及实现
  19. cs231n笔记--到底什么是梯度消散
  20. 非常详细的微信跳一跳“黑科技”脚本

热门文章

  1. kstools工具是什么牌子_寻线仪什么牌子好用
  2. 算法的力量-----开复李
  3. iperf网络测速软件
  4. windows 全部命令
  5. 存储技术趋势与智能存储组件
  6. centos7/8开机启动流程
  7. 插入排序与选择排序的比较
  8. Flink per-job Could not find Flink job
  9. Quartz Cron表达式 每周、每月执行一次
  10. Win10技巧:使用“照片”应用剪辑视频、添加特效