当Java的子类重写了父类的实例方法时,我们可以使用关键字super来调用父类中的这个方法。但是,如果父类的方法中包含了子类重写的实例方法,我们该怎么调用呢?
以下是几种方法:
1.使用super关键字和this关键字
我们可以在子类中使用super关键字调用父类的方法,然后再使用this关键字来调用子类的方法。
class Animal {
public void move() {
System.out.println("Animal is moving");
}
}
class Dog extends Animal {
public void move() {
super.move(); // 调用父类中的方法
System.out.println("Dog is running");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.move(); // 输出:Animal is moving,Dog is running
}
}
在子类的move()方法中,我们使用super.move()来调用父类中的move()方法,然后再使用this关键字来调用子类中的move()方法。
2.给方法加上一个参数
我们可以在父类的方法中加上一个参数,这个参数用来标识当前调用的方法是父类的方法还是子类的方法。子类在调用父类的方法时,把这个参数传递进去就可以了。
class Animal {
public void move(String from) {
if (from.equals("Animal"))
System.out.println("Animal is moving");
else
System.out.println("Dog is running");
}
}
class Dog extends Animal {
public void move() {
super.move("Animal"); // 调用父类中的方法,传递一个参数
System.out.println("Dog is running");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.move(); // 输出:Animal is moving,Dog is running
}
}
在父类的move()方法中,我们加上一个参数from,用来标识当前调用的方法是父类的方法还是子类的方法。在子类的move()方法中,我们使用super.move("Animal")来调用父类中的move()方法,并把"Animal"作为参数传递进去,表示调用的是父类的方法。
以上两种方法都可以解决子类调用父类的方法中包含子类重写的实例方法的问题。第一种方法比较简单,但是需要在父类方法中明确调用子类方法的位置。第二种方法需要在父类方法中加上一个参数,但是这个参数可以用来标识当前调用的方法是父类的方法还是子类的方法,比较灵活。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java子类调用父类的方法中包含子类重写的实例方法 - Python技术站