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 相关文章推荐
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
解决ObjectMapper.convertValue() 遇到的一些问题
Jun 30 Java/Android
JavaWeb Servlet实现网页登录功能
Jul 04 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
java泛型通配符详解
Jul 25 Java/Android
idea 在springboot中使用lombok插件的方法
Aug 02 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Spring Boot实现文件上传下载
Aug 14 Java/Android
Android移动应用开发指南之六种布局详解
Sep 23 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
PHP开发中常用的8个小技巧
2008/08/27 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python中时间模块的基本使用教程
2019/05/14 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python eval函数介绍及用法
2020/11/09 Python
Java基础面试题
2012/11/02 面试题
聚美优品恶搞广告词
2014/03/14 职场文书
小学五年级学生评语
2014/04/22 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang