访问父类成员
在Java中,super
关键字是实现继承机制的核心工具,主要用于在子类中访问父类的成员(包括变量、方法和构造器)。其核心作用可归纳为以下三点:
一、调用父类构造器
子类构造器可以通过 super
调用父类的构造器,用于初始化继承的属性。需注意:
-
super
调用必须是子类构造器的第一条语句; -
若父类无参构造器,则可省略
super()
,系统默认调用父类无参构造器。
示例:
class Animal {
protected String name;
Animal(String name) {
this.name = name;
}
}
class Dog extends Animal {
int age;
Dog(String name, int age) {
super(name); // 调用父类构造器
this.age = age;
}
}
二、访问父类成员变量
当子类覆盖了父类的成员变量时,可通过 super
访问父类的原始变量。例如:
class Animal {
protected String name = "Animal";
void setName(String name) {
this.name = name;
}
String getName() {
return name;
}
}
class Dog extends Animal {
@Override
void setName(String name) {
super.setName(name); // 调用父类方法修改父类变量
this.age = 3; // 子类新增属性
}
void printInfo() {
System.out.println("Name: " + super.getName() + ", Age: " + age);
}
}
三、调用父类方法
当子类重写了父类的方法时,可通过 super
调用父类的原始实现。例如:
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
@Override
void eat() {
super.eat(); // 调用父类方法
System.out.println("Dog is eating bones");
}
}
四、注意事项
-
super
只能在子类中使用,且必须出现在构造器或方法内部; -
若父类无参构造器,
super()
可省略,否则必须显式调用带参数的父类构造器。
通过合理使用 super
,可有效避免代码冲突,提升代码可维护性,是面向对象编程中实现继承的关键语法。