Java基本注解分析,为什么要使用@Override

简介: <div class="markdown_views"><h1 id="override">@Override</h1><p>标注在子类方法中,表示此方法是覆盖父类的重载方法,具有强制性,即如果父类没有此方法,则会编译出错。那它到底有什么用呢?让我们来看这一需求场景:</p><blockquote> <p>假如我们利用面向对象的多态特性特性编程,有子类Sa,Sb继

@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月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
13 1
|
1月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
14 1
|
15天前
|
Java 调度
Java中常见锁的分类及概念分析
Java中常见锁的分类及概念分析
16 0
|
15天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
13 0
|
28天前
|
存储 SQL Java
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了(二)
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了
44 1
|
1月前
|
人工智能 监控 算法
java智慧城管源码 AI视频智能分析 可直接上项目
Java智慧城管源码实现AI视频智能分析,适用于直接部署项目。系统运用互联网、大数据、云计算和AI提升城市管理水平,采用“一级监督、二级指挥、四级联动”模式。功能涵盖AI智能检测(如占道广告、垃圾处理等)、执法办案、视频分析、统计分析及队伍管理等多个模块,利用深度学习优化城市管理自动化和智能化,提供决策支持。
223 4
java智慧城管源码 AI视频智能分析 可直接上项目
|
3天前
|
Java 测试技术 编译器
JAVA注解
JAVA注解
9 0
|
15天前
|
Java
Java中关于ConditionObject的signal()方法的分析
Java中关于ConditionObject的signal()方法的分析
22 4
|
15天前
|
Java
Java中关于ConditionObject的分析
Java中关于ConditionObject的分析
18 3
|
19天前
|
设计模式 缓存 安全
分析设计模式对Java应用性能的影响,并提供优化策略
【4月更文挑战第7天】本文分析了7种常见设计模式对Java应用性能的影响及优化策略:单例模式可采用双重检查锁定、枚举实现或对象池优化;工厂方法和抽象工厂模式可通过对象池和缓存减少对象创建开销;建造者模式应减少构建步骤,简化复杂对象;原型模式优化克隆方法或使用序列化提高复制效率;适配器模式尽量减少使用,或合并多个适配器;观察者模式限制观察者数量并使用异步通知。设计模式需根据应用场景谨慎选用,兼顾代码质量和性能。