Java中子类向父类传递
时间: 2025-05-05 20:25:38 浏览: 29
### Java 中子类向父类传递参数的方法
在 Java 中,当创建一个子类的对象时,默认情况下会先调用父类的无参构造函数。然而,在实际开发中经常需要带参数来初始化父类中的属性。这可以通过显式地使用 `super` 关键字来完成。
#### 使用 super 调用父类构造函数
为了使子类能够向父类传递参数,可以在子类的构造函数里利用 `super()` 来指定要调用哪个版本的父类构造器,并提供相应的实参列表[^2]:
```java
class Parent {
String name;
public Parent(String name) { // 父类中有参构造函数
this.name = name;
System.out.println("Parent Constructor Called, Name is " + name);
}
}
class Child extends Parent {
public Child(String childName, String parentName) {
super(parentName); // 显式的调用了父类的有参构造函数
System.out.println("Child Constructor Called, Child's own property not initialized yet");
}
}
```
在这个例子中,每当实例化一个新的 `Child` 对象时,都会自动执行带有两个字符串参数的构造函数。该构造函数内部的第一条语句即为对父类构造函数的调用,它接收来自子类的一个额外参数用于设置父类的数据成员。
#### 注意事项
- 如果父类只有含参构造而没有无参构造,则子类必须在其构造函数内通过 `super(...)` 或者间接地经由其他方式确保能访问到合适的父类构造形式。
- 当定义了一个自定义构造函数之后,即使它是私有的或者是受保护级别的,编译器也不会再为你合成默认(无参)构造函数了;因此在这种情形下如果不主动声明任何构造函数的话,将会导致无法隐式调用父类构造的情况发生。
#### 完整示例程序
下面给出一段完整的代码片段展示上述概念的应用场景:
```java
public class MainApp {
static class Parent {
private final int value;
protected Parent(int v){
this.value = v;
System.out.printf("Parent constructor called with %d\n",v);
}
@Override
public String toString(){
return String.format("Value from Parent: %d",this.value);
}
}
static class Child extends Parent{
private final double factor;
public Child(double f,int pVal){
super(pVal); // 此处传入pVal作为父类构造函数的参数
this.factor=f;
System.out.printf("Child constructor called with %.1f and inherited value of %s\n",
f,new Parent(pVal));
}
@Override
public String toString(){
return String.format("%s * Factor=%.1f=%g",super.toString(),factor,value()*factor);
}
private float value(){return (float)this.factor*(int)(Math.random()*10);}
}
public static void main(String[] args) {
new Child(2.789,45).toString();
}
}
```
此段代码展示了如何在一个继承体系结构中有效地让子类向父类传递必要的配置信息以便于后者可以正常工作。
阅读全文
相关推荐


















