抽象类中有一个空实现方法A,部分子类重写方法A,抽象类B调用方法A会发生什么

背景

在看别人写过的代码的时候,发现了一个很有意思的设计。学艺不精一时之间不知道这代码是怎么调用的,做了一个简单的代码模型分析了一下,感觉比较有意思,就分享一下。

代码罗列与讲解

  1. 抽象父类
    AFunc() 在父类中是一个空实现方法,BFunc()先调用了AFunc()进行入参处理,随后执行其它逻辑
public abstract class Father {
	public void AFunc(Object args){}
	public void BFunc(Object args) {
		AFunc(args);
		System.out.println("do something...");
	}
}
  1. 子类Son1继承Father类,并重写了AFunc()
    其中,otherFunc()中调用了父类的BFunc()方法
public class Son1 extends Father{
	public void AFunc(Object args){
		System.out.println("this is Son1");
	}

	public void otherFunc() {
		Object obj = new Object();
		BFunc(obj);
	}
}
  1. 子类Son2继承Father类,不重写AFunc()
    其中,otherFunc()中调用了父类的BFunc()方法
public class Son2 extends Father{
	public void otherFunc() {
		Object obj = new Object();
		BFunc(obj);
	}
}

这是基于我所接触的代码中的一个简化模型,项目中原本是有几十个子类实现了AFunc()与几十个不实现AFunc()的子类,共同点是都调用了父类的BFunc()。

执行结果

编写了一个简单的测试方法,测试结果如下
在这里插入图片描述
重写了抽象类空实现的方法的son1,调用父类方法BFunc()时,会调用自身的执行逻辑,反之son2调用BFunc()时会执行到父类AFunc()的空方法。

总结

复习了一下子类继承父类重写方法的执行优先级,也学习了一下设计思路。这种方法适用于子类都需要调用父类的一个公共方法,但有一些子类需要对入参进行特殊处理,得先处理再执行后面的逻辑的场景。当然你说写到具体的子类里面自己调用不行吗?那答案肯定是可以的。只是这样的设计会使代码主要更统一,稍微优雅一点点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值