方法的重写是指在子类中定义与父类具有相同的方法名、返回类型和参数表的新方法,该方法将覆盖父类原有的方法。
子类可使用super关键字引用当前类的父类同名方法。
例题练习如下:
首先创建一个Student类,包含的属性有姓名name和年龄age;
class Student{ //创建父类Student;
String name; //属性name;
int age; //属性age;
void displayInformation() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
}
}
派生出本科生类(Undergraduate),并新增属性为专业specialty,新增与父类同名方法并根据子类对方法适当增加内容;
class Undergraduate extends Student{
String specialty; //子类中增加新的属性specialty;
void displayInformation() {
super.displayInformation(); //引用Student类中的方法;
System.out.println("专业:" + specialty);
}
}
同样派生出研究生类(Postgraduate),新增属性为研究方向studydirection,同样新增与父类同名方法并适当增加内容;
class Postgraduate extends Student{
String studydirection; //子类中增加新的属性studydirection;
void displayInformation() {
super.displayInformation();//引用父类中的方法;
System.out.println("研究方向:" + studydirection);
}
}
需要注意的是两个子类都新增displayInformation()方法并在原有属性基础上各自新增不同的属性,所以两个子类重写后的方法已经完全不同了。
以上两个子类引用父类方法除了以上写法还可以换成另外一种:
class Undergraduate extends Student{
String specialty; //子类中增加新的属性specialty;
void displayInformation() {
System.out.println("姓名:" + super.name);
System.out.println("年龄" + super.age);
System.out.println("专业:" + specialty);
}
}
class Postgraduate extends Student{
String studydirection;
void displayInformation() {
System.out.println("姓名:" + super.name);
System.out.println("年龄" + super.age);
System.out.println("研究方向:" + studydirection);
}
}
最后,是程序的运行。分别将子类实例化,并对各属性赋予具体的值,就可以运行成功了!
public class demo4 {
public static void main(String[] args) {
Undergraduate a = new Undergraduate();
a.name = "张三";
a.age = 21;
a.specialty = "大数据";
a.displayInformation();
Postgraduate b = new Postgraduate();
b.name = "李四";
b.age = 23;
b.studydirection = "人工智能方向";
b.displayInformation();
}
}