java 父类调用子类_【Java面试】父类能调用子类的方法吗?

本文探讨了Java中父类能否调用子类方法的问题,提供了四种实现方式,包括直接创建子类对象、调用静态方法、使用反射和通过监听回调。然而,这些方式在实际项目中并不被推荐,因为它们可能违背面向对象的设计原则,如多态性和封装。为了解决这类问题,文章提出了使用模板方法设计模式作为更合适的解决方案,以封装不变部分,扩展可变部分,同时保持代码的清晰和易于维护。
摘要由CSDN通过智能技术生成

文章开始前,我们先抛出一个链式问题:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值