资源说明:在Java编程语言中,`super`关键字是一个非常重要的概念,它用于引用当前对象的父类中的成员。`super`关键字的使用主要有以下几个方面:
1. 访问父类的成员变量:
当子类和父类有同名的成员变量时,通过`super`关键字可以明确指定使用父类的成员变量。例如,在`ChildClass`中,`value`变量在子类和父类中都存在,但`super.value`表示引用父类`FatherClass`的`value`。
2. 调用父类的构造函数:
子类在构造函数中可以使用`super()`调用父类的无参构造函数,或者`super(参数列表)`调用父类的带参数构造函数。这在子类初始化时,确保父类的状态也被正确设置。例如,如果`FatherClass`有一个带参数的构造函数,可以在`ChildClass`的构造函数中使用`super(参数)`来调用。
3. 调用父类的方法:
类似于访问成员变量,当子类重写了父类的方法,`super`关键字也可以用来调用父类被重写的方法。在`ChildClass`的`f()`方法中,`super.f()`就是调用了父类`FatherClass`的`f()`方法。
```java
class FatherClass {
public int value;
public void f() {
value = 100;
System.out.println("FatherClass.value:" + value);
}
}
class ChildClass extends FatherClass {
private int value;
public ChildClass() {
super(); // 调用父类的默认构造函数
}
public void f() {
super.f(); // 调用父类的f()方法
value = 200;
System.out.println("ChildClass.value:" + value);
System.out.println(value); // 输出子类的value
System.out.println(super.value); // 输出父类的value
}
}
public class TestInHerit {
public static void main(String args[]) {
ChildClass cc = new ChildClass();
cc.f();
}
}
```
在上述示例中,当我们运行`TestInHerit`类的`main`方法,会输出如下结果:
```
FatherClass.value:100
ChildClass.value:200
200
100
```
这个输出反映了`super`关键字在方法调用和成员变量访问中的作用。`super.f()`执行父类`FatherClass`的`f()`方法,将父类的`value`设为100;然后,子类`ChildClass`的`f()`方法中,`value`被设为200,并分别输出了子类和父类的`value`。
至于内存分布,Java使用了类继承的层次结构来分配内存。每个对象都会有自己的实例变量,而继承自父类的变量也会在对象的内存空间中占有位置。在上述例子中,`FatherClass`的实例变量`value`在`ChildClass`的对象中也有一个副本。当创建`ChildClass`的实例时,会先初始化父类的实例变量,然后是子类的。`super`关键字在这里起到了在内存中找到父类成员的指针的作用。
`super`关键字是Java中实现多态性和继承的关键,它允许子类继承并扩展父类的功能,同时保留父类的原有行为。理解并正确使用`super`可以帮助开发者更好地理解和设计面向对象的程序。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。