子类不重写该方法的话this调用的是子类还是抽象类
时间: 2024-03-10 21:51:22 浏览: 64
子类调用抽象父类.zip
如果子类没有重写抽象类中的非抽象方法,并且在抽象类的另一个方法中使用了 this.方法 来调用这个非抽象方法,那么实际上调用的是抽象类中定义的方法。
具体来说,如果抽象类中的非抽象方法没有被子类重写,在子类对象中调用该方法时,实际上会调用抽象类中定义的方法。这是因为在 Java 中,方法调用是基于实际对象类型的动态绑定(dynamic binding),即根据实际对象类型来确定要调用的方法。
例如,假设有一个抽象类 Animal,它有一个非抽象方法 eat(),实现如下:
```java
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating...");
}
public void play() {
this.eat();
}
}
```
在这个例子中,play() 方法调用了 this.eat() 来调用 eat() 方法。如果具体的子类 Cat 没有重写 eat() 方法,那么在 Cat 对象中调用 play() 方法时,实际上会调用 Animal 类中定义的 eat() 方法。
```java
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
}
```
在这个例子中,Cat 类没有重写 eat() 方法,因此在 Cat 对象中调用 play() 方法时,输出结果将为 "Cat is eating...",调用的是 Animal 类中定义的 eat() 方法。
阅读全文