Java基本注解分析,为什么要使用@Override
来源:互联网 发布:淘宝联系卖家的软件 编辑:程序博客网 时间:2024/05/20 05:25
@Override
标注在子类方法中,表示此方法是覆盖父类的重载方法,具有强制性,即如果父类没有此方法,则会编译出错。那它到底有什么用呢?让我们来看这一需求场景:
假如我们利用面向对象的多态特性特性编程,有子类Sa,Sb继承自父类S.我们需要在子类Sa,Sb各自拓展父类S的speak方法,然后根据业务逻辑,通过A的引用来调用Sa,Sb的重载方法speak。示例代码如下所示:
/*--------------------定义父类A--------------------*/public class A { public void speak(String city){ System.out.println("I'm A,I am not from " + city); }}/*--------------------定义子类Sa--------------------*/public class Sa extends A{ public void spak(String city){ System.out.println("I'm Sa,I am from " + city); }}/*--------------------定义子类Sb-------------------*/public class Sb extends A{ public void speak(String city){ System.out.println("I'm Sb,I am from " + city); }}/*--------------------调用测试方法-------------------*/public static void main(String args[]){ int i = 0; A a = null; if(i == 0){//模拟满足业务条件1 System.out.print("业务逻辑1执行:"); a = new Sa(); a.speak("广东"); } if(++ i == 1){//模拟满足业务条件2 System.out.print("业务逻辑2执行:"); a = new Sb(); a.speak("湖北"); }}/*--------------------控制台打印-------------------*//*业务逻辑1执行:I'm Sa,I am from 广东业务逻辑2执行:I'm Sb,I am from 湖北*/
这里是我们业务中,想要的结果,但如果我们不小心把咱们的Sb类中的speak方法写错成了spek,或将传入参数类型、数量写错等(即不能成功重载),如下所示:
/*--------------------speak方法写错成了spek-------------------*/public class Sb extends A{ public void spek(String city){ System.out.println("I'm Sb,I am from " + city); }}/*--------------------speak方法参数类型出错-------------------*/public class Sb extends A{ public void spek(int city){ System.out.println("I'm Sb,I am from " + city); }}/*--------------------speak方法参数个数出错-------------------*/public class Sb extends A{ public void spek(String city,String province){ System.out.println("I'm Sb,I am from " + city); }}/*--------------对于以上三种情况,控制台都会打印-------------------*//*业务逻辑1执行:I'm Sa,I am from 广东业务逻辑2执行:I'm A,I am not from 湖北*/
但如果我们在Sb的speak方法上添加注解@Override,则会出现编译异常如:The method speak(int) of type Sb must override or implement a supertype method
从上面我们能够看到,对子类的重载标注@Override是良好的编程习惯,否则在大规模的项目中,我们万一不小心出现这种细节错误,可能会为后期排错带来巨大障碍。
除了Override,还有另外两种最基本的注解:
@Deprecated
它用来标示某个类或其方法、变量等已过期,如果我们在其他类中调用标注了@deprecated的类或方法变量,将会引起编译器的警告
@SuppressWarnings
它用于取消编译器的警告,标注了此注解的元素会有向下传递的效果,比如在类级别标注了注解,则在该类的所有方法中也会取消同类的编译器警告。
1 0
- Java基本注解分析,为什么要使用@Override
- Java基本注解分析,为什么要使用@Override
- Java @Override注解
- java为什么要注解?
- 注解是什么,为什么要使用注解?
- Java的@Override注解问题
- java 注解:SuppressWarnings、Deprecated、Override
- java 注解:SuppressWarnings、Deprecated、Override
- JAVA 注解:SuppressWarnings、Deprecated、Override
- java 注解:SuppressWarnings、Deprecated、Override
- Android中为什么使用@override
- Java自定义注解(annotation)基本使用
- 为什么要写@Override呢?
- 【代码优化】坚持使用Override注解
- EffectiveJava(36) -- 坚持使用Override注解
- (36):坚持使用Override注解
- Java源码分析(一)为什么要使用StringBuilder
- 注解的基本使用
- 基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
- kernel里获取uboot的环境变量
- 终极结束进程方法API
- MVC里面两个dropdownlist联动
- @protocol 代理模式总结
- Java基本注解分析,为什么要使用@Override
- meta标签总结
- HDU-2571 命运
- 使用Android性能分析工具——TraceView
- iOS_生成pem推送证书(用于百度云推送)
- Offer题1~3 重载=&指针和数组&二维数组替换
- 自动检测数据库连接的有效性
- 随笔一
- UITableView的区头(不可滑动)和表头之分