重载(Overload):
1.重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
2.每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
3.被重载的方法必须改变参数列表(参数个数或类型不一样)。
4.被重载的方法可以改变返回类型。
5.被重载的方法可以改变访问修饰符。
6.被重载的方法可以声明新的或更广的检查异常。
7.方法能够在同一个类中或者在一个子类中被重载。
方法的重载:同一个类的多个方法只是方法名相同而参数列表不同编译器自动调用合适的方法
1.同一个文件可以包含多个类
2.public修饰的类只能有一个
3.public修饰的类必须与文件名相同
例:
public class A{
public void a(){//do some thing}
public void a(int i){//do some thing}
public int a(){
return 0
}
}
class B extends A{
public void a(char c){//do some thing}//对其父类的方法重载
}
重写(Override):
1.重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。
2.父类的成员方法只能被它的子类重写。
3.声明为 final 的方法不能被重写。
4.声明为 static 的方法不能被重写,但是能够被再次声明。
5.重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
6.重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法申明了一个检查异常IOException,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOException的父类,只能抛出IOException或者IOException的子类异常。
7.父类型中的被重写函数体不为空:意味着对其大多数子类型来说,该方法可以被直接复用。
8.对某些子类型来说,有特殊性,故重写父类型中的函数,实现自己的特殊要求。
9.如果父类型中的某个函数实现体为空,意味着其所有子类型都需要这个功能,但各有差异,没有共性,在每个子类中均需要重写。
10.重写的时候,不要改变原方法的本意。
11.重写的时候子类只能与父类方法的访问范围相同或扩大,不能缩小,例如父类中的public方法在子类中重写时只能是public方法。
方法的重写:必须发生在父子类之间,并且是子类重写父类的方法
原则: 1.两同:方法名和参数列表相同
2.两小:返回值类型和抛出的异常:子类 <= 父类(其中基本类型和void的返回值必须相同)
3.一大:访问权限*:子类 >= 父类
例:
public class C{
private Object a(){
return "abc";
}
}
public class D extends C{
public String a(){
return "ABC";
}
}
public class E{
public static void main(String[] args){
C c = new C();
c.a;//调用的是C类的a()方法
D d = new D();
d.a;//调用的是D类的a()方法
C c = new D();//向上造型*,C类型引用指向D类型对象
c.a;//调用子类D的重写方法a();
}
}