概述
super关键字表示的是 父类,在子类中,想调用父类的方法或属性,可以用super关键字
访问父类的成员变量
super.成员变量 ‐‐ 父类的成员变量
例子
class Fu {
// Fu中的成员变量。
int num = 5;
}
class Zi extends Fu {
// Zi中的成员变量
int num = 6;
public void show() {
// 访问父类中的num
System.out.println("Fu num=" + super.num);
// 访问子类中的num
System.out.println("Zi num=" + num);
}
}
class ExtendsDemo03 {
public static void main(String[] args) {
// 创建子类对象
Zi z = new Zi();
// 调用子类中的show方法
z.show();
}
}
执行结果:
Fu num = 5
Zi num = 6
注意:
Fu 类中的成员变量是 非私有的,子类中可以直接访问。若Fu 类中的成员变量私有了,子类是不能 直接访问的。
访问权限参见:https://www.malaoshi.top/show_1EF4rV1tPz4T.html
通常编码时,我们遵循封装的原则,使用private修饰成员变量,在父类中提供公共的getXxx方法和setXxx方法。
访问父类的方法
super.成员方法名() ‐‐ 父类的成员方法
例子
class Animal {
public void eat() {
System.out.println("animal : eat");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("cat : eat");
}
public void eatTest() {
this.eat(); // this 调用本类的方法
super.eat(); // super 调用父类的方法
}
}
public class ExtendsDemo08 {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Cat c = new Cat();
c.eatTest();
}
}
执行结果:
animal : eat
cat : eat
animal : eat
访问构造方法
super(...) ‐‐ 父类的构造方法
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。 super() 必须在 构造方法的第一行
由于this()也必须在 构造方法的第一行,所以这两个代码 不能同时出现
注意事项:
super可以调用父类方法,由于权限控制,只有父类允许子类调用的才可以。
参见:https://www.malaoshi.top/show_1EF4rV1tPz4T.htmlsuper(),调用父类的构造方法,因为子类在创建对象时,一定也创建了父类,所有在写子类构造方法时要调用父类的构造方法。当父类没有声明构造方法,或者存在无参的构造方法时,super()可以不写,这样默认会调用无参的构造方法。
如果父类没有无参构造方法,就需要手动指定调用父类的那个构造方法。- Java中所有的类都是Object类的子类,但是基础Object可以不写,因为不写extends,jdk编译时会默认添加基础Object,如果写了,就不会添加。Object是Java中所有类的超类(父级类,可以能是父类,可能是爷爷类)