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 相关文章推荐
springboot @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
springboot中一些比较常用的注解总结
Jun 11 Java/Android
Spring Data JPA使用JPQL与原生SQL进行查询的操作
Jun 15 Java/Android
Java循环队列与非循环队列的区别总结
Jun 22 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
springboot临时文件存储目录配置方式
Jul 01 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
js自定义回调函数
2015/12/13 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
js使用formData实现批量上传
2020/03/27 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
初步认识Python中的列表与位运算符
2015/10/12 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
python config文件的读写操作示例
2019/09/27 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
大学班级干部的自我评价分享
2014/02/10 职场文书
优秀党员获奖感言
2014/02/18 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
公司口号大全
2014/06/11 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
个人创业事迹材料
2014/12/30 职场文书
整改通知书
2015/04/20 职场文书
房产遗嘱范本
2015/08/06 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android