方法重载
如果一个类中有多个具有相同名称但参数不同的方法,则称为方法重载。但返回值不同不是方法重载
重载的不同方法
通过改变参数的数量
add(int num1,int num2){}
add(int num1,int num2,int num3){}
add(int... args){}//多个参数相加
通过改变参数类型
class Add{
int add(int num1,int num2){
return num1 + num2;
}
double add(double num1,double num2){
return num1 + num2;
}
}
两个参数add参数类型不同,可以称为重载
add(int num1,int num2){}
add( num1,double num2){}
重载与返回类型无关
class Add(){
static int add(int num1,int num2){
return num1 + num2;
}
static double add(int num1,int num2){
return num1 + num2;
}
public static void main(String args){
add(1,2);
}
}
以上函数当点用add的时候,该找哪个函数呢?是int add(){} 还是double add(){}?所以根据返回数据类型来重载,是很容易造成混淆,因为不知道调用哪个返回类型的add方法。
方法重写
重写:子类父类出现了一模一样的方法(注意:返回值类型可以是子类父类)
应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
注意事项:
【1】父类中私有方法不能被重写,因为父类私有方法子类根本就无法继承
【2】子类重写父类方法时,访问权限不能更低,最好就一致
【3】父类静态方法,子类也必须通过静态方法进行重写
其实这个算不上方法重写,但是现象确实如此
【4】子类重写父类方法的时候,最好声明一模一样。
class Phone{
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
class NewPhone extends Phone{
public void call(String name){
//System.out.println("给"+name+"打电话");
super.call(name);//通过super关键字调用父类的功能
System.out.println("可以听天气预报");
}
}
class ExtendsDemo{
public static void main(String[] args){
NewPhone np = new NewPhone();
np.call("123");
}
}
//输出
给123打电话
可以听天气预报