方法的重载
1.1 重载的概念(Overload)
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理
"两同一不同":
- 相同:同一个类、相同方法名
- 参数列表不同:参数个数不同,参数类型不同
1.2 构成重载的实例:
// 举例一:Arrays类中重载的sort() / binarySearch();PrintStream中的println()
// 举例二:
// 如下的4个方法构成了重载
public void getSum(int i,int j){
System.out.println("1");
}
public void getSum(double d1,double d2){
System.out.println("2");
}
public void getSum(String s ,int i){
System.out.println("3");
}
public void getSum(int i,String s){
System.out.println("4");
}
不构成重载的实例:
// 如下的3个方法不能与上述4个方法构成重载
public int getSum(int i,int j){
return 0;
}
public void getSum(int m,int n){
}
private void getSum(int i,int j){
}
1.3 重载方法判断
如何判断是否构成方法重载?
严格按照定义判断:两同一不同。跟方法的权限修饰符、返回值类型、形参变量名、方法体都没关系!
应该注意的是,返回值不同,其它都相同不算是重载。
注:Overloaded的方法是否可以改变返回值的类型?
如果几个重载Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。
如何确定类中某一个方法的调用:
①方法名 —> ②参数列表
方法的重写
2.1 什么是方法的重写(override 或 overwrite)?
子类继承父类以后,可以对父类中同名同参数的方法,但要做出有别于父类的响应时,你就要覆盖父类方法.
重写发生在运行期,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。
注:构造器不能被继承,因此不能被重写,但可以被重载。
2.2 重写举例:
// 父类
class Circle{
public double findArea(){
}//求面积
}
// 子类
class Cylinder extends Circle{
public double findArea(){
}//求表面积
}
2.3 重写的规则:
方法的声明:
权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{
//方法体
}
约定俗称:子类中的叫重写的方法,父类中的叫被重写的方法
-
子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
-
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
-
返回值类型:
- 如果方法的返回类型是void和基本数据类型,则返回值重写时不可修改。
- 父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类。即如果方法的返回值是引用类型,重写时是可以返回该引用类型的子类的。
- 返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。
- 如果父类方法访问修饰符为
private/final/static
则子类就不能重写该方法,但是被 static 修饰的方法能够被再次声明。
注意:
使用 @Override 注解,可以让编译器帮忙检查是否满足上面的两个限制条件。