14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

(1)重载:发生在同一个类中
重写:发生在两个具有IS-A关系(继承关系)的类中
(2)重载:编译时多态
重写:运行时多态
(3)重载:提高代码的可阅读性
重写:覆盖父类中已经提供的方法
(4)重载:与返回值的类型无关,具有相同的方法名,参数类型不同或参数个数不同;可以具有不同的返回值类型,但是要在参数列表不同的情况下。
重写:子类重写的方法参数列表(参数类型和参数个数)必须具有和父类一模一样,返回类型需要相同或者时协变返回类型(Covariant Return Type).
重写:子类重写的方法必须比父类中的具有更公开的访问权限
重写:父类引用指向子类对象时,将会调用子类重写的方法
重写:方法重写时的协变返回值类型指子类重写的方法返回类型可以是子类返回对象的子类。协变返回值类型不支持原声数据类型。
重写方法时的异常处理:
1.如果父类方法没有定义异常,那么子类重写的方法不可以定义检查异常,但可以定义非检查异常
2.如果父类方法定义了异常,那么子类重写的方法可以定义与父类方法中相同的异常,父类方法中定义的异常的子类,或者不定义异常,但是不是定义父类方法中定义的异常的父异常。
拓展:
关于@Override
添加了Override的方法必须重写父类的方法或者实现接口中的方法或者重写Object类中的方法,否则编译器会报错。
协变返回值类型支持非原始数据类型
关于协变返回值类型和Object类中的clone()方法:
Java1.5之后支持协变返回值类型之后,可以重写Object类中的clone()方法来返回特定的子类对象。