一、super关键字的应用场景
1. 访问父类的成员变量
2. 访问父类的构造函数
3. 访问父类的方法
二、super关键字的使用
class Animal {
protected String name; //注意:若限定符是private,子类无法使用super关键字访问父类成员变量
protected int id;
public Animal(String name, int id) {
this.name = name; //参数与成员变量同名,成员变量被覆盖,用this访问成员变量
this.id = id;
}
public Animal(){
this("未知",0); //默认不带参数的构造方法,this调用另一个构造方法,若没有别的构造方法,会报错
}
public void eat() {
System.out.println(name + ":正在吃" + " id:" + id);
}
public void sleep() {
System.out.println(name + ":正在睡" + " id:" + id);
}
public void introduction() {
System.out.println("大家好我是:" + name + " id:" + id);
}
}
class Penguin extends Animal {
private String sex;
public Penguin(String name, int id, String sex) {
super(name, id); //super访问父类构造函数
this.sex = sex;
}
public void sleep(){
super.sleep(); //super访问父类方法
System.out.println(name + ":正在睡" + " id:" + id + " 性别:" + sex);
}
}
class Mouse extends Animal{
private String sex;
public Mouse(String name, int id, String sex){
super(name,id); //super访问父类构造函数,只能放到第一行
this.sex = sex;
}
public void introduction(){
System.out.println("大家好我是:" + super.name + " id:" + super.id + " 性别:" + sex);
} //super访问父类成员变量,注意父类成员变量限定符。
}
public class ExtendsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Penguin p1 = new Penguin("Tonny", 1000, "帅哥");
Mouse p2 = new Mouse("Juny", 1001, "美女");
p1.eat();
p2.sleep();
p1.introduction();
p2.introduction();
p1.sleep();
}
}
输出结果:
Tonny:正在吃 id:1000
Juny:正在睡 id:1001
大家好我是:Tonny id:1000
大家好我是:Juny id:1001 性别:美女
Tonny:正在睡 id:1000
Tonny:正在睡 id:1000 性别:帅哥
三、总结
问题一:
如果开发者自定义了一个类,没有显示的进行类的继承,那么该类中成员函数是否可以使用super关健健字?
答:可以,每个类都继承了超类Object,此时super访问的是Object类。
注意:super访问父类构造函数,只能放到第一行
子类使用super关键字访问父类非private的成员变量,构造函数,方法。
四、参考资料
this和super用法参考如下博客:
http://blog.51cto.com/lavasoft/18886
《JAVA编程思想》