文章开始前,我们先抛出一个链式问题:
Java中父类能调用子类的方法吗?
如果不可以,原因?如果可以,如何做?
每种实现方式,在实际项目被允许吗?
不被允许的原因有哪些?
如果在实际项目中,的确有这样的特殊业务场景,应如何“正确的” - “变相”的去实现?
1.Java中父类能调用子类的方法吗?
答案:能
1.1 实现方式描述
(1)在父类中直接new子类相关对象或者通过构造函数传入子类对象,然后调用其方法
(2)将子类相关方法声明为static,在父类中调用子类的static方法
(3)在父类中通过反射调用子类的相关方法
(4)通过注册监听,然后通过回调接口调用子类相关方法
在看了相关描述之后,大家肯定迫切想看一下,四种方法的代码如何进行编写,或者您已经想到了。
1.2 四种实现方式的代码
接下来我们一起看一下这四种“奇葩”的实现方式的代码。
测试代码很简单,包含三个类:
TestTwo 测试功能类、Father父类、Son子类
package test;
/**
* 父类
* @author itbird
*
*/
public class Father {
private SonFuctionListener mListenr;
public Father() {
}
/**
* 在父类中直接new子类相关对象,然后调用其方法
*/
public void realizeWay1() {
Son son = new Son();
son.testSonMethod("在父类中直接new子类相关对象,然后调用其方法");
}
/**
* 在父类中调用子类的static方法
*/
public void realizeWay2() {
Son.testSonMeth