前言
上周我们学习了如何在子类调用父类的构造方法和父类成员,主要是运用super关键字;大家要记得时常巩固之前所学的内容,只有量的积累,才会有质的飞跃。本周我们来学习Java方法的重载和重写。
一、Java方法的重载
Java允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(Overload),使用方法重载其实就是避免出现繁多的方法名,有些方法的功能是相似的,如果重新建立一个方法,重新取个方法名称,会降低程序可读性。所以我们就可以通过传入参数的不同,去调用不同的方法。接下来我们通过一个具体的例子来看看吧。
package tisheng4;
public class Overloading {
public void max(int a, int b) {
// 含有两个int类型参数的方法
System.out.println(a > b ? a : b);//若a>b成立,则返回a,否则返回b,与if...else类似
}
public void max(double a, double b) {
// 含有两个double类型参数的方法
System.out.println(a > b ? a : b);
}
public void max(double a, double b, int c) {
// 含有两个double类型参数和一个int类型参数的方法
double max = (double) (a > b ? a : b);
System.out.println(c > max ? c : max);
//当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
}
public static void main(String[] args) {
Overloading ol = new Overloading();//实例化一个ol对象
System.out.printf("调用参数均为int型的max方法:");
ol.max(53, 15);//调用ol对象的max方法,注意参数类型
System.out.printf("调用参数均为double型的max方法:");
ol.max(5.132, 5.234);
System.out.printf("调用三个参数的max方法:");//注意此时输出的c为double型
ol.max(3.14, 7.32, 8);
}
}
通过上面的例子,我们看到,变量之间实现的功能类似,但变量数据类型不一致时,我们就可以使用方法的重载,为不同的数据类型变量定制一套方法。
二、Java方法的重写
在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。
2.1 方法重写遵循的规则
2.2 方法重写的注意事项
2.3 我们通过一个例子来看看方法的重写吧,首先定义一个父类People类,并定义getPeople方法,
package tisheng4;
public class People {
public String name;
public String ID;
public int score;
public People(String name,String ID,int score){
this.name=name;
this.ID=ID;
this.score=score;
}
public String getPeople(){
return "我是父类的getPeople方法!";
}
}
然后定义People的子类Pupil,并在Pupil里重写getPeople方法
package tisheng4;
public class Pupil extends People {
private String gender;
public Pupil(String name,String gender,String ID,int score){
super(name,ID,score);//调用父类的构造方法
this.gender=gender;
}
public String getPeople(){//方法的重写,注意与父类方法的区别
return "大家好,我叫"+name+",性别"+gender+",学号为:"+ID+",分数为:"+score;
}
void display(){
System.out.println(super.getPeople());//用super关键字调用父类的getPeople方法
}
public static void main(String[] args){
Pupil student = new Pupil("小圈圈","男","12345",89);//创建Pupil类的对象student
System.out.println(student.getPeople());
student.display();
}
}
运行结果及截图如下:
结语
上周的推文中,在开头处不小心误删了一个“千”字,这周来补上,“千禧难题之七”也算圆满谢幕,上周习题参考答案如期奉上
编辑:玥怡居士|审核:世外居士
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有