package super_;
public class A {
//四个不同权限类型的属性
public int a = 1;
protected int b = 2;
int c = 3;
private int d = 4;
//四个不同权限类型的方法
public void n1(){
}
protected void n2(){
}
void n3(){
}
private void n4(){
}
//两个不同权限的构造器
public A(){
}
private A(int a){
}
}
package super_;
public class B extends A{
public void aaa(){
//用super.来访问父类的属性(private属性不能访问)
System.out.println(super.a+super.b+super.c);
}
public void bbb(){
//super.访问父类的方法(private不行)-->super.方法名(参数列表)
super.n1();//public
super.n2();//protected
super.n3();//默认
// super.n4();//private,报错
}
public B(){
// super(5);//报错,参数列表int的构造器是private的,访问不了
super();//这个类型的构造器是public的,能访问
}
}
1.用super调用父类构造器的好处(分工明确,父类属性由父类初始化,子类属性由子类初始化)
【例如之前写的:】
class PC extends Computer{
private String brand;
//构造器(除了自己的属性还有继承父类的属性)
public PC(int neicun, String cpu, String yingpan, String brand) {
super(neicun, cpu, yingpan);//自动用super指定父类的构造器
this.brand = brand;
}
2.子类成员(属性和方法)和父类的成员重名的时候,为了访问父类的成员,必须通过super
【没有重名,用super、this、直接访问效果一样】
(找方法的顺序:子类优先,父类其次,以此类推..... 找到了但是不能访问,会报错;直到object都找不到,也报错) super.方法名:相当于直接在父类里面查找方法
3.super的访问不限于父类,如果爷爷类和本类有相同的成员(属性和方法),可以用super访问爷爷类的成员(多个上级类有同名的成员,访问时遵循就近原则)