要是子类有重写这个非抽象方法后,在抽象类中的另一个方法调用this.方法,那么是调用的子类重写的还是抽象类的
时间: 2024-03-10 16:51:21 浏览: 62
Java编程关于子类重写父类方法问题的理解
如果子类重写了抽象类中的非抽象方法,并且在抽象类的另一个方法中使用了 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() 方法时,实际上会调用 Cat 类中重写后的 eat() 方法。
```java
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void eat() {
System.out.println(getName() + " is eating fish...");
}
}
```
在这个例子中,Cat 类重写了 eat() 方法,将输出改为了 "is eating fish..."。如果创建一个 Cat 对象并调用 play() 方法,输出结果将为 "Cat is eating fish...",而不是 "Cat is eating..."。
阅读全文