在Java中 @Override的作用如下:在覆写(重写)基类的某个方法时,防止自己不小心重载了该方法,而不是覆写该方法。
首先说明下重载和覆写的概念:
重载(Overloading):子类改写父类的方法,方法名相同,参数列表不同(个数或类型不同),不过返回值的类型可以相同也可以不同。
补充一下,当两个方法的参数列表相同,即参数的个数与类型相同时,返回类型必须相同,否则编译不通过,返回值的类型不影响重载。而且当两个方法的参数的个数与类型均相同,但各参数的顺序不同时,也算重载。
覆写(Overriding):子类中的方法与父类中的方法名字一致,返回值类型以及参数列表均一致则为覆写(重写)。
下面举例说明:
子类test继承于父类father_test,覆写了父类中的方法f(),并在前面添加了@Override。此时编译运行通过,打印出"test"。
class father_test{
void f(int b) {
System.out.println("father_test");
}
}
public class test extends father_test{
@Override
void f(int a) {
System.out.println("test");
}
public static void main(String[] args) {
test T=new test();
T.f(1);
}
}
将子类中覆写的方法f()的参数a改成char类型,这时覆写就变成了重载,而编译器就报错了。提示:类型为 test 的方法 f(char)必须覆盖或实现超类型方法。
而去掉@Override语句后编译器不再报错,运行后打印出"father_test"。
class father_test{
void f(int b) {
System.out.println("father_test");
}
}
public class test extends father_test{
@Override
void f(char a) {
System.out.println("test");
}
public static void main(String[] args) {
test T=new test();
T.f(1);
}
}
可见 @Override 语句可以防止我们在进行覆写时,不小心误操作,写成了重载。这时编译器会提示我们出现错误。