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中Collection的一些常用方法总结
Jun 13 Java/Android
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
浅谈Java父子类加载顺序
Aug 04 Java/Android
JVM之方法返回地址详解
Feb 28 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
Apr 24 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
python链接Oracle数据库的方法
2015/06/28 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
对于Python中RawString的理解介绍
2016/07/07 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
学习Python列表的基础知识汇总
2020/03/10 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
小学生学雷锋演讲稿
2014/04/25 职场文书
社团活动总结
2014/04/28 职场文书
会计系毕业生求职信
2014/05/28 职场文书
争先创优演讲稿
2014/09/15 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
领导视察通讯稿
2015/07/18 职场文书
药房管理制度范本
2015/08/06 职场文书