java中重写父类方法加不加@Override详解


Posted in Java/Android onJune 21, 2021

java重写父类方法加不加@Override

这个是我在刚学习java时遇到的问题,希望能给像我一样的新手学习时带来帮助,如有错误请指正,谢谢!

class Father{
    public String name;
    public int age;
    public Father(){
    }
    public void work(){
        System.out.println("盖房子");
    }
}
class Son extends Father{
    public int weight;
    public Son(){
    }
    public void work(){
        System.out.println(i);
    }
}

上面子类的work()方法和基类work()方法的控制器类型(包括返回值类型、参数等)是完全一致的,这种情况加不加@Override都是可以的,都可以对基类方法进行重写。

因为不写的情况下,java虚拟机会进行自动识别。

class Son extends Father{
    public int weight;
    public Son(){
    }
    public int work(int i){
        System.out.println();
    }
}

在上面这种情况下,work()方法会被系统认为是子类新定义的方法,没有继承基类,这也是被允许的。

class Son extends Father{
    public int weight;
    public Son(){
    }
    public int work(){
        System.out.println();
        return 1;
    }
}

但是这种情况只修改返回值类型时,是不被允许的,其仍被看做基类的重写,但是返回值类型变了,就会被编辑器认为基类重写返回值类型不一致而报错。

所以存在即合理,在编写代码时如果需要对基类进行重写还是加上@Override比较好,还可以检测一些容易忽略的错误。

@Override的作用

@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:

1、可以当注释用,方便阅读

2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。

例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。

举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。

@Override
public void onCreate(Bundle savedInstanceState)
{…….}

这种写法是正确的,如果你写成:

@Override
public void oncreate(Bundle savedInstanceState)
{…….}

编译器会报如下错误:

The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method

以确保你正确重写onCreate方法(因为oncreate应该为onCreate)。

而如果你不加@Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法:oncreate

加不加@override有什么区别

1.简单来说@override注解是告诉编译器,下面的方法是重写父类的方法

2.如果不写@override注解去直接重写方法,编译器是不会判断你是不是正确重写了父类中的方法的。

如重写方法时参数与父类不同,程序是不会提示报错的。这会留下一个潜在的bug。

当你写了@override注解时,程序会判断你是否正确的重写了父类的对应方法。

而且加上此注解后,程序会自动屏蔽父类的方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Spring Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
Feign调用全局异常处理解决方案
Jun 24 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
java解析XML详解
Jul 09 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
一棵php的类树(支持无限分类)
2006/10/09 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP fclose函数用法总结
2019/02/15 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
Python代码的打包与发布详解
2014/07/30 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Python FFT合成波形的实例
2019/12/04 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
Python实现微信表情包炸群功能
2021/01/28 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
优秀学生获奖感言
2014/02/15 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
七一党日活动总结
2014/07/08 职场文书
升职自我推荐信范文
2015/03/25 职场文书
爱国电影观后感
2015/06/19 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle