一、 在Java类中使用super来引用父类的成分
1.super可用于访问父类中定义的属性。
2.super可用于调用父类中定义的成员方法。
3.super可用于在子类构造方法中调用父类的构造方法。
4.super的追溯不仅限于直接父类。
举个例子:
父类:
public class Person { private String name; private int age; public String getInfo() { return "Name: " + name + "\nage: " + age; } }
子类:
public class Student extends Person { private String school = "New Oriental"; public String getSchool(){ return school; } public String getInfo() { // 调用父类的方法 return super.getInfo() +"\nschool: " +school; } }
入口函数类:
public class DiaoY { public static void main(String[] args){ Person p=new Person(); Student s=new Student(); System.out.println("父类信息:\n"+p.getInfo()); System.out.println("子类信息:\n"+s.getInfo()+"\n学生的学校:\n"+s.getSchool()); } }
运行的结果:
父类信息
Name: 李雷
age: 30
子类信息
Name: 李雷
age: 30
school: New Oriental
学生的学校
New Oriental
二、 super关键字在构造方法上面的一些总结:
1.子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。
2.在一个Java类中可以通过两种方式获得构造方法:
(1)使用系统默认的无参数构造方法。
(2)显式定义一个或多个构造方法。
(注意:一旦显式定义了构造方法,则系统不再提供默认构造方法。)
3.在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法。
4.如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法。
5.如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。
下面有个比较简单的例子去分析:
public class Person { private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) { this.name = name; this.age = age; this.birthDate = d; } public Person(String name, int age) { this(name, age, null); } public Person(String name, Date d) { this(name, 30, d); } public Person(String name) { this(name, 30); } // …… }
public class Student extends Person {
private String school;
public Student(String name, int age, String s) {
super(name, age);
school = s;
}
public Student(String name, String s) {
super(name);
school = s;
}
public Student(String s) {
school = s;// 编译出错: no super(),系统将调用父类无参数的构造方法。
}
}
这里是子类对象实例化的过程:
以上就是我对子类实例化父类的一些理解和总结。