探讨Java中方法的重载和重写
重载:
在同一个类中,可以有多个同名方法,只要他们的参数个数或者参数类型不同即可构成重载方法。
用途:根据不同的参数,使用对应的重载方法来实现需要的功能。
//将下面方法进行重载
//两同一不同:同一个类,相同方法名,不同参数个数或参数类型
public void overLoad(int i){
System.out.println("重载方法");
}
重载举例:
public void overLoad(double d){
System.out.println("重载方法1");
}
public void overLoad(int i,int j){
System.out.println("重载方法2");
}
public void overLoad(int i,double d){
System.out.println("重载方法3");
}
非重载举例:
public void overLoad(int j){//参数个数和类型相同
System.out.println("不能构成重载方法1");
}
public int overLoad(int i){//返回值类型不同
System.out.println("不能构成重载方法2");
return 0;
}
private void overLoad(){//访问权限要相同
System.out.println("不能构成重载方法3");
}
重写:
在子类继承了父类之后,子类对父类中同名同参的方法进行覆盖重写。
重写举例:
//重写需要注意的地方
//①子类重写的方法的方法名和形参列表要与父类被重写的方法的方法名和形参列表相同
//②子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
//③声明为private的方法不允许被重写
//④当父类被重写的方法的返回值类型为void或者基本数据类型时,
// 子类重写的方法的返回值类型也必须和父类中的相同。
// 当父类被重写的方法的返回值类型为A类型时,
// 子类重写的方法的返回值类型必须是A类型或者A类型的子类。
//⑤子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
class A{
public void overWrite(int i){//被重写的方法
System.out.println("父类方法");
}
}
class B extends A{
public void overWrite(int i){//重写的方法
System.out.println("子类重写父类之后的方法");
}
}
方法重载和重写的区分
1、重载定义规则
重载的方法必须在同一个类中,方法名相同,参数列表不同。
2、重写定义规则
参数列表类型和列表相同
返回值类型为void或者基本数据类型时必须相同
返回类型为A类型时,子类重写的方法必须为A类型或者子类类型
访问权限必须大于等于被重写方法的访问权限,当被重写方法权限为private则不能重写
重写的方法抛出的异常类型小于被重写的方法抛出的异常类型
3、重载没有多态性
有多个同名方法,这些方法中的参数列表不同,编译器根据他们参数列表的不同来区分不同的方法,也就意味着重载方法在编译期就被确定了被谁调用,也称“静态绑定”。
4、 重写有多态性
重写之后的方法只有在运行时才知道具体调用哪个方法,称为“动态绑定”
ps:萌新上道,多多指教,如有错误,还请指点。( ̄︶ ̄)↗