Overload:
- 参数类型、个数、顺序至少有一个不相同。
- 不能重载只有返回值不同的方法名。
- 存在于父类和子类、同类中(重载的多个方法可以在一个类中,也可以在具有继承关系的一系列类中)。
Override:
- 方法名、参数、返回值相同。
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
- 存在于父类和子类之间。
- 方法被定义为final不能被重写。
class ParentClass {
public void sayHello(){
System.out.println("I'm parent");
}
}
class ChildClass extends ParentClass {
public void sayHello(){
System.out.println("I'm child");
}
}
/**
* 编译器根据参数不同在编译时即可根据参数确定使用那个方法。运行时类型可能是原引用类型的子类型。
* 但是,编译器重载时根据参数的编译时类型来决定参数类型,不去研究参数运行时类型。
* @author Administrator
*
*/
public class Test {
public void testOverLoad(ParentClass cls) {
// overload的特性 - 编译的时候决定调用的method
System.out.println("It's ParentClass");
// override的特性 - 运行时根据实例的真正类型决定调用方法
cls.sayHello();
}
public void testOverLoad(ChildClass cls) {
System.out.println("It's ChildClass");
cls.sayHello();
}
public static void main(String[] args) {
Test test = new Test();
ParentClass parentCls = new ParentClass();
ParentClass childCls = new ChildClass();
test.testOverLoad(parentCls);
test.testOverLoad(childCls);
}
}
/*
It's ParentClass
I'm parent
It's ParentClass
I'm child
*/