转载: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中的@Override标签,小细节大作用的更多相关文章

  1. java中的@Override标签

    @Override标签的作用: @Override是伪代码,表示方法重写. @Override标签的好处: 1.作为注释,帮助自己检查是否正确的复写了父类中已有的方法 2.便于别人理解代码 3.编译器 ...

  2. java中需要注意的小细节

    很早以前就打算写博客,但是总是因为不知道写什么,或是觉得博客里其他人已经把我要写的整理很好了而迟迟没有动笔,现在决定把自己平时的记录的一些笔记拿出来,希望大神们可以批评指导,并且希望能够帮助一些刚刚入 ...

  3. 手摸手教你如何在 Python 编码中做到小细节大优化

    手摸手教你如何在 Python 编码中做到小细节大优化 在列表里计数 """ 在列表里计数,使用 Python 原生函数计数要快很多,所以尽量使用原生函数来计算. &qu ...

  4. [小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)

    [小细节,大BUG] 6.问题描述:当从Plist文件加载数据,放入到tableView中展示时,有时有数据,有时又没有数据.这是为什么呢?相信很多大牛都想到了:我们一般将加载的数据,转换成模型,放入 ...

  5. Java中替换HTML标签的方法代码

    这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...

  6. JAVA中的break[标签]continue[标签]用法

    原文:JAVA中的break[标签]continue[标签]用法 注意:JAVA中的标签必须放在循环之前,且中间不能有其他语句.例如:tag:for或while或do--while; 1.使用brea ...

  7. Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

    写在前面 最近小伙伴加群时,我总是问一个问题:Java中的String类占用多大的内存空间?很多小伙伴的回答着实让我哭笑不得,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有说不知道 ...

  8. HTML 标签小细节

    简书地址:https://www.jianshu.com/p/03a23aa28a34 今天重新学习了一下HTML中标签的用法,补充并记录一下自己新学到的知识. a中的href href Contai ...

  9. [JAVA] 重写以及@Override标签

    以前JAVA看的少,最近做项目,对@Override的调用顺序有点疑惑,故查了一些资料.既然查资料了,那就把能看到的知识点整理一下,以供日后学习. 原文地址请保留http://www.cnblogs. ...

随机推荐

  1. background-position控制背景位置

    提示:需要把 background-attachment 属性设置为 "fixed",才能保证该属性在 Firefox 和 Opera 中正常工作.

  2. 【转帖】4412ARM开发板学习笔记(一)

    本文转自迅为论坛:http://www.topeetboard.com 新手在进行开发学习前,建议先看01-迅为电子开发板入门视频.对开发板和开发环境有一定的了解后,不要盲目接线开机.以下是个人的一点 ...

  3. java 访问sql server数据库

    控制面板--管理工具—ODBC数据源(64位)--系统DNS—添加(名称为“test”,服务器填“.”描述随意) 这里访问的数据库为AdventuerWorks 数据源配置好后可以测试一下,下面是ja ...

  4. 使用C#向ACCESS中插入数据

    使用C#向ACCESS中插入数据   1.创建并打开一个OleDbConnection对象 string strConn = " Provider = Microsoft.Jet.OLEDB ...

  5. using语法糖

    资源的分类 首先说一下资源的分类: 托管资源:由CLR管理分配和释放资源 非托管资源:不受CLR管理的对象,如 文件(StreamReader,BinaryReader,DataTable,各种Str ...

  6. JIRA学习一:Windows下安装破解JIRA6.3.6

    安装环境: WindowsXP MySQL-5.5.28 JDK1.6.0_21 JIRA功能全面,界面友好,安装简单,配置灵活,权限管理以及可扩展性方面都十分出色. 一.MySQL建库和建账号 1. ...

  7. 在ASP.NET中如何运行后台任务

    from:https://blogs.msdn.microsoft.com/scott_hanselman/2014/12/21/asp-net/ [原文发表地址] How to run Backgr ...

  8. Conherence Function

    来源: 部分来自wiki:https://en.wikipedia.org/wiki/Coherence_(signal_processing): 部分来自网络其它内容. The coherence  ...

  9. xpath 参考

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...

  10. Html网页使用jQuery传递参数并获取Web API的数据

    昨天Insus.NET有开始学习Web API,<ASP.NET MVC的Web Api的实练>http://www.cnblogs.com/insus/p/4334316.html .其 ...