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 相关文章推荐
Spring整合Mybatis的全过程
Jun 28 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Android Canvas绘制文字横纵向对齐
Jun 05 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 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的正则处理函数总结分析
2008/06/20 PHP
C# Assembly类访问程序集信息
2009/06/13 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
jquery禁用右键示例
2014/04/28 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
理解JavaScript原型链
2016/10/25 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Python smallseg分词用法实例分析
2015/05/28 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
应用服务器有那些
2012/01/19 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
店铺转让协议书
2015/01/29 职场文书