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

它用于取消编译器的警告,标注了此注解的元素会有向下传递的效果,比如在类级别标注了注解,则在该类的所有方法中也会取消同类的编译器警告。

目录
相关文章
|
28天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
62 7
|
10天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
25 6
|
3月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
105 43
Java学习十六—掌握注解:让编程更简单
|
1月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
78 5
|
2月前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
2月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
67 14
|
2月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
72 2
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2
|
2月前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
43 0
|
3月前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
30 0