关键字super的使用
super是指父类。 super关键字代表的是父类空间的引用。(并不能代表对象,只是代表一个对象中的一块内存而已)
super不能在static环境中使用。
使用super访问父类的域和方法
super访问隐藏的成员变量:
子类的成员变量与父类同名,此时父类的成员变量被覆盖。
class A{
int a;
int a1;
}
class B extends A{
int a;//与父类的成员变量名相同,属于变量隐藏现象。
void show(){
System.out.println("a="+a); //此处a是B中的a
System.out.println("super.a="+super.a); //此处a是A中的a
}
}
super调用父类同名方法时:
当子类覆盖父类的同名方法时,要调用父类的方法,就必须使用super。
void sayHello(){
super.sayHello();
System.out.println("子类sayHello()方法被调用");
}
使用super调用父类的构造方法
调用无参父类构造函数时:
-
隐式调用父类的无参构造方法
隐式,就是不将调用过程写出来。也就是说,我什么也不写,程序会默认的去调用父类的
-
显示用super()写出调用
class A{
A(){ System.out.println("我是父类的无参构造函数"); }
}
class B extends A{
B(){
//super(); // 注释掉即为隐式
System.out.println("我是子类的无参构造函数");
}
}
每个子类构造方法的第一条语句,都是隐含地调用super()
调用父类的含参构造方法
class Person{
String name;
int age;
Person(String name,int age){}
}
class Student extends Person{
String name;
int age;
String school;
Student(String name,int age,String school){
super(name,age);//有参数时显式调用,super()语句必须写在第一行
this.school=school;
}
}
如果某个类的构造方法的第一句是用this()来调用本类的另外一个构造方法,那么Java系统就不会默认用这个构造方法调用父类的构造方法。
super与this
super调用的是父类构造函数,this调用的是本类构造函数。
super与this都需要放在构造器第一行
点:https://blog.csdn.net/qq_40764966/article/details/99679555