java中重写父类方法加不加@Override
这个是我在刚学习java时遇到的问题,希望能给像我一样的新手学习时带来帮助,如有错误请指正,谢谢!
class Father{
public String name;
public int age;
public Father(){
}
public void work(){
System.out.println("盖房子");
}
}
class Son extends Father{
public int weight;
public Son(){
}
public void work(){
System.out.println(i);
}
}
上面子类的work()方法和基类work()方法的控制器类型(包括返回值类型、参数等)是完全一致的,这种情况加不加@Override都是可以的,都可以对基类方法进行重写。因为不写的情况下,java虚拟机会进行自动识别。
class Son extends Father{
public int weight;
public Son(){
}
public int work(int i){
System.out.println();
}
}
在上面这种情况下,work()方法会被系统认为是子类新定义的方法,没有继承基类,这也是被允许的。
class Son extends Father{
public int weight;
public Son(){
}
public int work(){
System.out.println();
return 1;
}
}
但是这种情况只修改返回值类型时,是不被允许的,其仍被看做基类的重写,但是返回值类型变了,就会被编辑器认为基类重写返回值类型不一致而报错。
所以存在即合理,在编写代码时如果需要对基类进行重写还是加上@Override比较好,还可以检测一些容易忽略的错误。