子类对象的构造函数的参数是父类对象时,同名方法怎么覆盖,并在同名方法中用父类的该方法
时间: 2024-10-14 14:10:53 浏览: 48
当子类的对象通过父类类型的引用创建并调用一个同名的方法时,如果这个方法在子类中进行了重写(override),那么会执行子类的方法实现,而不是父类的原始版本。这种机制允许你在子类构造函数中传递一个父类对象作为参数,并在其上调用特定的方法,即使那个方法已经被子类覆盖。
例如,在Java中:
```java
class Parent {
public void someMethod() {
// 父类的实现
}
}
class Child extends Parent {
@Override
public void someMethod() {
// 子类的实现,可能会利用父类对象的一些属性进行操作
super.someMethod(); // 这里可以调用父类的someMethod()
}
public Child(Parent parent) {
this(); // 先调用自己的构造函数(如果没有重写默认构造)
// 在子类构造函数中,可以用parent对象调用重写的someMethod()
parent.someMethod();
}
}
```
在这个例子中,`Child`的构造函数接受一个`Parent`类型的参数,然后在其内部调用了`super.someMethod()`,实际执行的是子类版本的`someMethod`。这样就实现了通过父类引用调用子类方法的效果。
相关问题
this和super不能同时出现在构造方法中
`this` 和 `super` 都是 Java 中用于构造函数内部引用自身或父类的特殊关键字。它们不能同时出现在一个构造方法中,因为它们的作用域和使用时机不同:
1. `this`: 这个关键字用于当前对象实例内部,当你在一个构造方法中有另一个参数与成员变量同名时,可以使用 `this` 来明确指定是要初始化成员变量,而不是接收外部传入的值。
2. `super`: 当你在子类构造方法中想要调用父类的构造方法时,会用到 `super`。这是为了确保父类的属性先被初始化,然后子类再进行自有的初始化过程。
如果你试图在一个构造方法中同时使用 `this()` 和 `super()`,编译器会报错,因为它们代表了两个完全不同的操作序列。通常的做法是在子类构造方法开始时先调用 `super()`,之后如果需要初始化子类特有的字段,则紧接着使用 `this()`。例如:
```java
public class SubClass extends ParentClass {
private int subField;
public SubClass(int subField) {
super(); // 调用父类的构造方法
this.subField = subField; // 初始化子类字段
}
}
```
阅读全文
相关推荐

















