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中的OPTIONAL
Jun 14 Java/Android
Java用自带的Image IO给图片添加水印
Jun 15 Java/Android
java中重写父类方法加不加@Override详解
Jun 21 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
mybatis3中@SelectProvider传递参数方式
Aug 04 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 Java/Android
Java线程的6种状态与生命周期
May 11 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
Android Gradle 插件自定义Plugin实现注意事项
Jun 16 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
php如何获取文件的扩展名
2015/10/28 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
Python的Django框架中if标签的相关使用
2015/07/15 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
python字符串查找函数的用法详解
2019/07/08 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
简单的Python人脸识别系统
2020/07/14 Python
Python grpc超时机制代码示例
2020/09/14 Python
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
十佳班主任事迹材料
2014/01/18 职场文书
腾讯广告词
2014/03/19 职场文书
高三家长寄语
2014/04/03 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
财务人员岗位职责
2015/02/03 职场文书
党员个人自我评价
2015/03/03 职场文书
社区重阳节活动总结
2015/03/24 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
详解Python内置模块Collections
2022/03/22 Python