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 11 Java/Android
Win10系统下配置Java环境变量
Jun 13 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Flutter集成高德地图并添加自定义Maker的实践
Apr 07 Java/Android
JAVA 线程池(池化技术)的实现原理
Apr 28 Java/Android
springboot为异步任务规划自定义线程池的实现
Jun 14 Java/Android
Java实现HTML转为Word的示例代码
Jun 28 Java/Android
Spring Boot实现文件上传下载
Aug 14 Java/Android
Java并发编程之Executor接口的使用
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
You might like
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
JS简单获得节点元素的方法示例
2018/02/10 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Python中生成器和迭代器的区别详解
2018/02/10 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
python算法题 链表反转详解
2019/07/02 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
Jar包的作用是什么
2014/03/30 面试题
保荐人的岗位职责
2013/11/19 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
学术诚信承诺书
2014/05/26 职场文书
工作检讨书500字
2014/10/19 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
运动会观后感
2015/06/09 职场文书
绿里奇迹观后感
2015/06/15 职场文书
初中政治教学反思
2016/02/23 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
Python anaconda安装库命令详解
2021/10/16 Python
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL