子类实现父类接口时注解为啥报错_Java 注解之 内置注解

4b12977e6cdb1cf2ea97f18d66e735e9.png

是终于迈着老寒腿跨入了2019,加油干!工作使人快乐。

Java注解是附加在代码中的一些信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。注解分为三类:1.内置注解;2.元注解;3.自定义注解。它们都不会直接影响到程序的语义,只是作为注解(标识)存在。

注解的作用分为三类:1.编写文档,通过代码里标识的元数据生成文档(生成文档doc文档);2.代码分析:通过代码里标识的元数据对代码进行分析(使用反射);3.编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查(Override)。

这篇文章主要讲内置注解(jdk 自带注解),有五个。废话不多说:

1.@Deprecated

意思是说此方法已过时,是因为有新的API的类替代了此方法。这个被划去的方法仍然是可以正常使用的。(格式不支持删除线,此处代码贴图片)如下图:

84fbbc9ace85f36108948568457678f8.png

运行结果:

Hi,baby

从结果看,@Deprecated不影响方法使用,只是一个提示。

2.@Override

1.告诉读代码的人,这是一个复写的方法

2.帮助自己检查是否正确的复写了父类中已有的方法告诉读代码的人,这是一个复写的方法。

创建一个父类:OverrideDemo

public class OverrideDemo {
 public static void main(String[] args) {
 
 OverrideDemo od = new OverrideDemo();
 od.sayHello("baby");
 }
 private void sayHello(String name) {
 
 System.out.println("Hello "+ name);
 }
}

运行结果:

Hello baby

创建子类:OverrideDemoSon,并且复写父类中的sayHello()方法。

public class OverrideDemoSon extends OverrideDemo{
 @Override
 public void sayHello(String name) {
 
 System.out.println("Hello ");
 }
}

在我们手工复写父类的方法时,方法的参数容易记错,如果不加@Override的话,编辑器就不会提示你没有复写成功。如下图,我们将参数类型改为int:

214e6f2eedf4eb90b132fc8732b628f7.png

如上图,sayHello()并不是重写了父类的sayHello()方法,但是编译器没有报错,一个隐藏的bug就这样诞生了。但是加上@Override的话如下图:

a7bc1da4cade2385b2044ce9abf464d1.png

编译器就会提示你,必须重写父类的方法。说明我们复写方法失败。

3.@SuppressWarnings

用于通知java编译器忽略特定的编译警告。

如下图,编译器产生的警告对代码左侧行列的遮挡,有时候会影响我们断点调试时打的断点。

44c450012905d3fadc2628d35bbf140b.png

如果加上@SuppressWarnings,可以消除这些警告的产生如下图:

443d8ed6736a97c1bc4284765a661309.png

此注解的使用有三种类型:

1.抑制单类型的警告:@SuppressWarnings("unused");

2.抑制多类型的警告:@SuppressWarnings("unused","unchecked");

3.抑制所有类型的警告:@SuppressWarnings("all")

警告关键字见下图:

af8e62b53904bd33e5e5e8497789e453.png

4.@FunctionalInterface

FunctionalInterface注解,在此做一下简单介绍:指定接口必须为函数式接口,如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。“函数式接口”是指仅仅只包含一个抽象方法的接口;

5.@SafeVarargs

这个注解用来抑制堆污染警告,具体解释会在补充堆污染后,单独写一篇来解释@SafeVarargs注解。


联系我:

50202d314d7a507a380176ca868eb46f.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值