这篇文章比较轻松,直接讲述一下java当中的方法重载和方法重写的区别。主要面向对象还是初学者,因为初学者经常弄混这两个概念性的问题。
一、重载 overloading,这个在JDK里可没有相关注解哦
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
重载用得好,也可大大提高你的代码设计的向下兼容能力。
重载的返回值类型可以相同也可以不同
二、重写overriding。强烈建议如果是重写,请加上方法注解:@Override
protected Object test(Object id) {
return null;
}
我们复写可以这么来:
@Override
protected Object test(Object id) {
return null;
}
//使用public修饰
@Override
public Object test(Object id) {
return null;
}
//使用final修饰也可以
@Override
public final Object test(Object id) {
return null;
}
//返回值用子类也行,这里用了user对象(用父类就不行了哟)
@Override
public final User test(Object id) {
return null;
}
//但不能用private修饰了,因为private小于protected **下面这个就是错的**
@Override
private User test(Object id) {
return null;
}
备注:入参必须一模一样,类型也是。但返回值允许返回是父类的子类,访问权限可以比父类高。复写的方法还可额外 static 、final、 native 、 synchronized等修饰
另外,接口中如果存在继承,子接口也是可以@Override父接口的哟,这个在平常使用经常遇到,这样具体子接口就能有更好的语意了。
处处都有
若方法类型为priavte static final ,java采用静态编译,编译器会准确知道该调用哪个方法。因此本人建议,能private的方法尽量不要public,因为JVM能够对private方法进行静态编译,从而大大提高调用效率的。