@Override是什么

    无论是在netBeans还是在eclipse开发环境中,写java代码的时候经常会碰到@Override,那么@Override具体是什么呢?

    @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 


1、可以当注释用,方便阅读 


2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错 


比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法)。

如下例所示:

class Fu
{
	private int a = 1;
	void print()
	{
		System.out.println("父类");
	}
}
class Zi extends Fu
{
	@Override
	void prin()//子类方法名与父类不同,编译会出错
	{
		System.out.println("子类");
	}
}
public class Test
{
	public static void main(String[] args)
	{
		new Zi().prin();
	}
}

    因此,在我们手工复写父类的方法时,容易把方法的参数记错或方法名写错,如果此时不加@Override的话,编辑器就不会提示。


以下引自:

分享一下@Override标签背后的小秘密---记录java的思行合一


《Thinking in java》的作者Bruce在讨论这个问题的时候,提到了一个问题就是override私有的方法的例子:


    现在我们向Fu类中添加一个私有方法,而在Zi中尝试复写

   结果编译器会提示错误,这是一个非常低级的错误,但是有时候恰恰就不会被我们发现:那就是试着复写私有方法,但是当我们去掉Override标签的时候,编译器是不会报错的,而且可以执行。

   其实Zi中的你所谓复写的print只是一个针对于Zi本身的私有方法。完全是一个新的方法。

   这就引出了一个问题,何为复写?

   在面向对象中,只有接口和共有方法,继承方法才有复写,私有方法不可以复写,但是又想了一下,才明白:不是不可以复写,而是根本就不存在复写私有方法的概念!

    这正是面向对象设计的初衷,私有方法本身就是为了封装在类内部,不希望别人来更改或者外部引用的,看到这里,忽然觉得,java设计的还真是不错,感觉到了思想和实现的统一。

    以前总觉得override标签可有可无,但没想到会引出这么多的问题,于是乎得到一个启示:认真思考每一个语法细节的意义,思行合一。



你可能感兴趣的:(java,@Override)