应该传入父类的地方却传入的父类,这个设计模式叫什么名字?

本文探讨了Java中使用泛型接口实现里氏替换原则的例子。解释了如何通过泛型接口实现父类引用指向子类对象而不违反原则的情况,并讨论了这种方式在不同业务场景中的应用及可读性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class T4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = getChild();
		B b = new ChildB();
		b.test(a);//test方法需要的是子类,但是这里传入的是父类;
		
	}
	static A getChild(){
		ChildA a = new ChildA();
		a.setType("1");
		a.setOther("2");
		return a;
	}
	
}
interface A{
	public String getType();
}
class ChildA implements A{
	String type=null;
	String other=null;
	public String getOther() {
		return other;
	}
	public void setOther(String other) {
		this.other = other;
	}
	@Override
	public String getType() {
		// TODO Auto-generated method stub
		return type;
	}
	public void setType(String type){
		this.type = type;
	}
	
}
interface B<T>{
	void test(T a);
}
class ChildB implements B<ChildA>{

	@Override
	public void test(ChildA a) {
		System.out.println(a.getOther());		
	}
	
}

    以上代码在main方法中的第三行代码,传入了一个父类参数,但是ChildB定义的是其子类,根据里氏代换原则,只有传入父类的地方,可以传入子类,但是在传入子类的地方传入父类却是违背里氏代换原则的,通常情况下是会报错的;但是这里实现了一个B接口后,这样的的实现却是可以的,并且还可以将值打印出来,这是为什么呢?

    这是什么样的设计模式,名称叫什么呢,一下子却想不起来了!

============================================

    后来咨询了相关的同事后,觉得这样写有这样写的好处,因为这里涉及到多个不同业务的处理,而不同的业务之间可能有不同的属性,如果是直接通过传入接口作为参数,那那个时候不同的业务处理起来就会受限制,通过采取这样继承泛型的接口,可以保证传入任何类型的字类都是可以的,从而满足不同的业务需求;但是这里也提到一点,这样的可读性并不好,因为这给后期其它的开发人员的维护带来了理解上的困难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值