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 相关文章推荐
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
springboot拦截器无法注入redisTemplate的解决方法
Jun 27 Java/Android
浅谈Python魔法方法
Jun 28 Java/Android
SpringBoot实现异步事件驱动的方法
Jun 28 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
Java中的继承、多态以及封装
Apr 11 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
Android实现图片九宫格
Jun 28 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
基于Android10渲染Surface的创建过程
Aug 14 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
Smarty保留变量用法分析
2016/05/23 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
webpack3之loader全解析
2017/10/26 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
python if not in 多条件判断代码
2016/09/21 Python
python实现聊天小程序
2018/03/13 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
python使用KNN算法识别手写数字
2019/04/25 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python怎么判断素数
2020/07/01 Python
中学清明节活动总结
2014/07/04 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
毕业生个人总结
2015/02/28 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js