Super关键字
-
super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象.
-
super代表的是当前子类对象中的父类型特征。
注意: 子类除了构造方法外,可以继承父类的所有属性和方法
- 访问父类的属性: super.属性名; 前提是有访问权限
- 方法父类的方法: super.方法名(); 前提是有访问权限
- 访问父类的构造器: suepr(); 前提是有访问权限
public class Person {
private String name;
private void show(){
System.out.println("123");
}
}
public class Student extends Person{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(super.name); // 此处会报错
p1.show(); // 此处会报错
}
}
上面因为private是私有,只能在本类中访问,所以报错
解决方法: 使用getName()获得私有属性
public class Person {
private String name;
public void show(){
System.out.println("123");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Student extends Person{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(p1.getName());
p1.show();
}
}
上面的例子示意的是: 子类除了构造方法外,可以继承父类的所有属性和方法,但使用super()前提是有访问权限
如果想访问父类的属性,而由于属性一般设置为是private的,super.属性 无法访问成功,则使用super.方法的方式super.getName()获得私有属性。
super和this一样,都不能用在静态方法中
在构造方法中,若是构造函数的第一行代码没有显式的调用super(…)
那么Java默认都会调用super(),并且递归调用到object里的super()。
super()不能和this()共存。