Java里super关键字可以访问子类中被隐藏了的父类的成员变量和被重写的父类方法以及使用super调用父类的构造对吗
时间: 2024-09-29 08:02:11 浏览: 70
是的,在Java中,`super` 关键字不仅可以访问子类中被隐藏(即声明为final或private)的父类成员变量,也能调用被重写了的父类方法。这是因为当子类重写父类的方法时,实际上是在创建一个新的方法定义,而`super.methodName()` 表示的是调用父类原来的方法,不会执行子类自己的版本。
此外,当你在子类的构造函数中使用 `super()` 或者 `super(param1, param2, ...)` 时,就是在直接调用父类的构造函数,帮助完成父类的初始化,尤其是当子类构造函数中有需要父类初始化的步骤时。这避免了在每个子类构造函数中都手动复制父类构造函数的内容。
例如:
```java
class Parent {
protected String hiddenVar;
// 重写父类的protected方法
protected void overriddenMethod() {
System.out.println("This is the parent's method");
}
}
class Child extends Parent {
private String hiddenVar = "Inherited from parent"; // 隐藏父类的hiddenVar
public Child(String extra) {
super(extra); // 调用父类构造
System.out.println(hiddenVar); // 可以访问父类隐藏的变量
super.overriddenMethod(); // 调用被重写的父类方法
}
}
```
阅读全文