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垃圾回收器
Jun 16 Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
Spring Boot两种全局配置和两种注解的操作方法
Jun 29 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Java线程的6种状态与生命周期
May 11 Java/Android
Java实现注册登录跳转
Jun 16 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
Python的迭代器和生成器
2015/07/29 Python
python3 读写文件换行符的方法
2018/04/09 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
python退出循环的方法
2020/06/18 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
《姥姥的剪纸》教学反思
2014/02/25 职场文书
2014年党员整改措施
2014/10/24 职场文书
青年文明号申报材料
2014/12/23 职场文书
小学新教师个人总结
2015/02/05 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS