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 elasticsearch安装以及部署教程
Jun 28 Java/Android
详解Spring事件发布与监听机制
Jun 30 Java/Android
实体类或对象序列化时,忽略为空属性的操作
Jun 30 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
Java界面编程实现界面跳转
Jun 16 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
php中计算程序运行时间的类代码
2012/11/03 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
js下利用控制器载入对应脚本
2010/07/17 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Vue实现验证码功能
2019/12/03 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
详解python 发送邮件实例代码
2016/12/22 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
django 模型中的计算字段实例
2020/05/19 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
客服主管岗位职责
2013/12/13 职场文书
教师实习自我鉴定
2013/12/18 职场文书
见习期自我鉴定
2014/01/31 职场文书
税务会计岗位职责
2014/02/18 职场文书
职工小家建设活动方案
2014/08/25 职场文书
科学发展观标语
2014/10/08 职场文书
2014年宣传工作总结
2014/11/18 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
学校运动会通讯稿
2015/07/18 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
pandas数值排序的实现实例
2021/07/25 Python