在上次的课程中学习到Java的继承,在Java中当子类想使用父类的成员时就需要用到super这个关键字,而super在Java中有两种用途。
一、
第一种用途是在子类的构造方法中,super关键字可以调用父类的构造方法将参数传递给它。
其使用语法是:super(参数)
而需要注意的是:super关键字的使用必须在子类构造方法的第一条语句。来分析一个例子:
父类:
public class Person {
public String name;
public char sex;
private int age;
public Person(String name){
this.name = name;
}
public int setAge(int age){
return this.age = age;
}
public int getAge(){
return this.age;
}
public void sleep(){
System.out.println("人需要休息");
}
}
子类:
public class Student extends Person {
public Student(){
//super("Tom");
}
public void sleep(){
System.out.println("学生需要休息");
}
public void test(){
setAge(10);
System.out.println(getAge());
super.sleep();
}
}
启动函数:
public class Start {
public static void main(String[] agrs){
Student s = new Student();
System.out.println(s.name);
s.test();
}
}
在父类中,定义了一个有形参的构造方法,在子类中定义了一个无参的构造方法,在编译时会报错。因为在创建对象,子类实例化时,子类会默认调用父类的无参构造,这时就有两个解决方案。一是在父类中敲进去无参的构造方法,二是需要将子类中注释的语句敲进去,由此来实现子类的实例化。
二、
而第二种用途:是当父类和子类有同名成员时,子类会默认访问本类的成员。为了使子类访问父类中的同名成员就需要用到关键字super。
使用语法:super.成员名
接着继续拿上面这个例子来分析:
父类中有一成员方法sleep(),子类也有一个同名的方法sleep(),当需要使用父类的sleep()方法时就通过语句:super.sleep();来调用。