好了,现在验证了我们的猜想,当子类覆盖父类方法时,子类返回值可以是父类方法返回值类型或其子类型。那我们不禁想,那传入参数呢,是否也符合?很遗憾,经测试时不行的,TestPeople不变,TestStudent 如下:
  public class TestStudent extends TestPeople {
  /**
  * 当入参改为Bar类型时,编译报错了
  * @param foo
  * @return
  */
  @Override  //此处报错了 method does not override from its supperclass
  Bar test(Bar foo) {
  return new Bar();
  }
  }
  综上, 子类覆盖父类方法时:
  1. 方法名及入参数类型必须保持一致.
  2. 返回值类型需保持是父类返回值的类型或其子类型
  另外还有2点也是需记住的:
  3. 覆盖的不能是私有方法(这个好理解,私有的外部类也不可见)
  4. 子类方法抛出的异常需是父类异常类型或其子类型(同返回值一样的限制)