以Person作为父类,创建学生子类Student,并在子类中调用父类中某指定的构造方法。通过super()语句。
super()语句可以调用父类特定的构造方法
super()语句必须写在子类构造方法的第一行,否则编译时将出现编译错误
this()语句和super()语句都必须放在第一行,因此这两个语句无法同时出现在同一个构造方法当中。
super与this一样,指向对象,所以不能出现在static环境当中。
package com;
class Person {
private String name;
private int age;
public Person() {
System.out.println("调用了Person类的无参构造方法");
}
public Person(String name, int age) {
System.out.println("调用了Person类的有参构造方法");
this.name = name;
this.age = age;
}
public void show() {
System.out.println("姓名" + name + "年龄" + age);
}
}
class Student extends Person
{
private String department;
public Student()
{
System.out.println("调用了Student类的无参构造方法");
}
public Student(String name,int age,String dep)
{
super(name,age);//调用父类的有参构造方法 public Person(String name,int age)
department=dep;
System.out.println("我是"+department+"的学生");
System.out.println("调用了Student类的有参构造方法Student(String name,int age,String dep)");
}
}
public class app8_2 {
public static void main(String[] args)
{
Student stu1=new Student();//创建对象,并调用无参构造方法
Student stu2=new Student("李小四",23,"信息系");//创建对象,并调用有参构造方法
stu1.show();
stu2.show();
}
}
输出
程序中即使没有明确的指定子类调用父类的构造方法,但程序执行时子类还是会先调用父类中没有的参数的构造方法,以便进行初始化操作。
去除29行super()语句,父类无参构造方法还是会被调用
没有调用父类的有参构造方法,this.name=name; this.age.=age;