super关键字
一、定义
1、super是一个关键字,全部小写。
2、super关键字代表着当前对象的那一部分父类特征。
3、默认构造方法的第一行有this(),super()。两个不可能同时存在,只存在一个,都没有的时候默认是super()。
4、父类的构造方法一定会执行。
二、super与this对比
this:
this能出现在实例方法和构造方法中。
this的语法是:“this.”、“this()”
this不能使用在静态方法中。
this. 大部分情况下是可以省略的。
this.什么时候不能省略呢? 在区分局部变量和实例变量的时候不能省略。
public void setName(String name){
this.name = name;
}
this() 只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中
其它的构造方法,目的是:代码复用。
super:
super能出现在实例方法和构造方法中。
super的语法是:“super.”、“super()”
super不能使用在静态方法中。
super. 大部分情况下是可以省略的。
super.什么时候不能省略呢。当父类中有的属性,子类中也有,在子类中想调用父类中的属性的时候不可以省略。
super() 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的构造方法,
目的是:创建子类对象的时候,先初始化父类型特征。
三、能不能使用在静态方法当中
super 不能使用在静态方法当中,因为 super 代表了当前对象上的父类型特征, 静态方法中没有 this,肯定也是不能使用 super 的。
四、super什么时候可以省略
不可以省略的时候:
当父类中有的属性,子类中也有,在子类中想调用父类中的属性的时候不可以省略。
class A {
int a;
int b;
//父类中的有参构造方法
public A(int a, int b) {
this.a = a;
this.b = b;
}
}
class B extends A {
int a=3;
public B() {
super(1, 2);
}
public void move(){
System.out.println(this.a);
System.out.println(super.a);
}
总结:父类和子类中有同名实例变量或者有同名的实例方法,想在 子类中访问父类中的实例变量或实例方法,则super 是不能省略的,其它情况都可以省略。
五、super的三种使用
1、super.属性名
2、super.方法名(实参) 调用父类中的方法,当与子类中的方法名相同的时候不可以省略,当不重名的时候可以省略
例子:super.move2(2);
3、super(实参)在构造方法中的使用:这种用法是通过当前的构造方法调用父类的构造方法。
作用:
1、调用父类的构造方法,使用这个构造 方法来给当前子类对象初始化父类型特征。
2、代码复用。
例子:
class A{
int a ;
int b;
//父类中的有参构造方法
public A(int a, int b) {
this.a = a;
this.b = b;
}
}
class B extends A{
int c;
//子类中的有参构造方法
public B(int a, int b, int c) {
super(a, b);
this.c = c;
}
super()的作用:初始化当前对象的父类的特征,就是给父类型的参数进行赋值。
super关键字代表着当前对象的那一部分父类特征
super什么时候可以省略
六、注意:
1、 this 是可以单独使用的引用,但 super 无法输出,编译器提示 super 要使用必须是“super.xxx”,显然 super 并不指向独立的对象,并不是保存某个对象的内存地址。
2、super的点一定不可以省略,因为super不可以单独使用。
3、super 不是引用。super也不保存内存地址,super也不指向任何对象。
super 只是代表当前对象内部的那一块父类型的特征。
4、super的jvm图
子类可以使用super关键字访问父类中的方法和属性。