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 相关文章推荐
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
Java Dubbo框架知识点梳理
Jun 26 Java/Android
Java SSM配置文件案例详解
Aug 30 Java/Android
Java 实现限流器处理Rest接口请求详解流程
Nov 02 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
利用正则表达式匹配浮点型数据
May 30 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
一文搞懂Java中的注解和反射
Jun 21 Java/Android
HttpClient实现文件上传功能
Aug 14 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
1.PHP简介
2006/10/09 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
佳能法国商店:Canon法国
2019/02/14 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
农救科工作职责
2013/11/27 职场文书
函授生自我鉴定
2014/03/25 职场文书
通用员工手册范本
2015/05/14 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS