当有一个父类和一个子类时,一般情况下父类不会知道子类的存在,不会调用子类的方法。但有时候确有需要,比如在多态的情况下,需要在编译时绑定父类的方法,在运行时动态绑定子类的方法。下面就来具体讲解一下如何实现父类调用子类的方法。
1. 使用抽象方法实现父类调用子类的方法
抽象方法是一种没有实现的方法,只有方法声明,抽象方法必须在抽象类中声明。如果子类继承了这个抽象类,那么子类必须要实现这个抽象方法,这样就能实现父类调用子类的方法的需求。具体的过程是:
- 在父类中定义一个抽象方法。
- 在子类中重写这个抽象方法,子类中的方法就是要被父类调用的方法。
- 在父类中,创建一个方法,方法中调用抽象方法。
- 在子类中,重写这个方法,重写的方法中可以调用自己的方法。
示例代码如下:
abstract class Parent {
abstract void testMethod(); //定义抽象方法
void callMethod() {
testMethod(); //调用抽象方法
}
}
class Child extends Parent {
void testMethod() {
System.out.println("这是子类的方法");
}
void callMethod() {
super.callMethod(); //调用父类方法,执行父类的testMethod,实际执行的是子类的testMethod
}
}
调用父类方法的时候,实际执行的是子类的testMethod()
方法。这样就能实现父类调用子类的方法了。
2. 利用多态实现父类调用子类的方法
在父类中定义一个方法,但是方法中的操作不能确定是什么,这样可以让子类继承这个方法,子类可以重写这个方法,实现自己的操作。这就是多态的应用。具体的过程是:
- 在父类中定义一个方法。
- 在子类中重写这个方法,所写的方法是父类定义的方法的子类实现。
- 在父类和子类外面的某个地方,创建一个指向子类的引用,将这个引用存储到父类的引用中。
- 在父类中,调用这个方法。
- 在运行时,由于多态的原理,实际调用的是子类的方法。
示例代码如下:
class Parent {
void testMethod() { //定义一个方法
System.out.println("这是父类的方法");
}
}
class Child extends Parent {
void testMethod() { //重写方法
System.out.println("这是子类的方法");
}
}
public class Test {
public static void main(String[] args) {
Parent p = new Child(); //创建一个指向子类的引用
p.testMethod(); //调用父类的方法,实际调用子类的方法
}
}
在运行时,父类调用的实际上是子类的方法,实现了父类调用子类的方法。
综上所述,以上两种方式都可以实现父类调用子类的方法,具体取决于实际场景的需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中父类怎么调用子类的方法 - Python技术站