NingG +

java 重载 & 重写

问题背景

阅读程序时,看到在子类中的各种@Override的注解,例如:

public class A{
	public void speak(int i){
		  ...
	}
	...
}
 
public class B extends A{
	@Override
	public void speak(int i){
		  ...
	}
	...
	public static void main(String[] args){
		B b = new B();
		A a1;
		a1 = (A)b;
 
		a1.speak(1);
	}
}

B继承了A,并且在BOverride了方法speak();现在问a1.speak(1)调用的是class Aclass B?中的speak()方法?

分析

上面的例子是一个典型的重写,因为:subclass中方法的名称、输入参数、返回参数都与supclass中完全相同。

现在有一个问题:重写的方法前没有@Override行不行?(这个问题很好,说明you’re thinking。)没有@Override的注解完全可以,只需要满足:subclass中方法的名称、输入参数、返回参数与supclass中完全相同即可实现方法的重写。

现在问题又来了:既然没有@Override也能实现方法的重写,为什么很多地方都加了@Override?原因很简单,添加了@Override,编译器会依照supclass中方法来进行检查,保证此方法真的实现重写。(避免了因为粗心等造成的bug

重写(override:就是覆盖;基于继承的,重写父类的方法,方法名什么都一样,方法体不同。

重载(overload:基于同一个类的,不同的重载方法,主要是参数列表不同

重写 & 重载:都是多态性的体现,重写是子类与父类间的多态性,重载是同一类中多态性的体现。

参考来源

  1. http://blog.csdn.net/smyhmz/article/details/2716638
  2. http://blog.csdn.net/leonardwang/article/details/7046180
Top