#认识自己
今天收到了人生中的第一个电面,没想到就是阿里巴巴的内推。其实也不算是非常严格的电面。也许是因为实习的缘故,聊了很多关于自己学习课程以及项目的事情,问的很随和但是自己因为基础不扎实非常紧张,当然也就没有通过,其中问到Java中很多函数上标有@Override的标签是什么意思。自己傻乎乎的答说是“用于解释代码”,回来一查才发现自己的错误。下面给出解释。
首先简单来说@Override的意思就是这个方法是父类提供的需要重写。但是我们知道只要父类的方法修饰符并不是abstract,那从语法角度来讲,我们不重写,不去重新实现也不会报错,但是一旦我们犯了一些粗心的错误,如想重写 public void toString()而重写了public void tostring()那这个提醒符号就会起作用。具体示例如下:
package com.Ranger.test1;
import java.applet.Applet;
public class Fruit {
public static void main(String[] args) {
Fruit apple = new Apple();
}
public void eat() {
// TODO Auto-generated method stub
System.out.println("taste good!");
}
}
然后我们写一个类Apple来继承fruit并重写它的 void eat()方法
package com.Ranger.test1;
public class Apple extends Fruit{
@Override
public void Eat() {
System.out.println("taste good!");
}
}
可以注意到这里经常出现“手一抖”的情况,不小心把方法中的一个字母大写了。但是这个时候我们貌似“重写” 实际上是将这个方法“重载”了,此时编译会不通过报错如下:
“The method eaT() of type Apple must override or implement a supertype method”(图片贴不上来)
但如果去掉@Override编译就会正常通过,所以@Override实际上是程序员自己向编译器申请的一个保障,当你知道这个方法只需要重写但又怕自己或是别人使用这块代码时不小心重载了,就可以加上@Override进行编译检错。
小问题经常引出大灾难,这里领附重载与重写的区别作为备忘:
重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更养个的限制(可以降低限制)
============================================================================================================
对于类似于@Override这样的注解的补充:
1.@Deprecated 过时API注解 我们在用到JDK提供的API的时候,在编译中遇到 这样的提示 提示用到过时的API ,那么这个API 就被这个@Deprecated注解所 标识,在javac进行编译的时候 发现了注解便做出相应的提示 。
2.@SuppressWarning("deprecation") 从字面意思上就是抑制 过时API的警告,这个可以放在调用过时的API的方法外部或者调用方法之前,那么在编译的时候javac遇到这个标识 即使知道API过时那么也不会输出过时API的提示