java对象为什么要用接口类型而不用具体实现类类型

今天写了个简单的静态代理,逻辑很简单,但是有一句话不太明白。ok,先扔代码

public class StaticProxy {
	public static void main(String[] args) {
		new Weddding(new I()).marry();
	}
}
interface Marry{
	void marry();
}
class I implements Marry{

	@Override
	public void marry() {
		System.out.println("今天我结婚");
	}
	
}
class Weddding implements Marry{

	private Marry i;
	
	public Weddding(Marry i) {
		this.i= i;
	}

	@Override
	public void marry() {
		System.out.println("婚礼前吃吃喝喝");
		i.marry();
		System.out.println("闹洞房");
	}
	
}

问题:
private Marry my;

不懂为什么代理对象要用Marry这个接口类,而不用My这个实现类,明明代理的真实对象是我(I),对吧,而且能用实现类为什么要用接口呢?

解决: 其实用I这个类型程序也是可以正常执行的,但是这就涉及到接口的好处了,如果一个类实现了多个接口,那用接口类型可以很清楚的告诉我们这个对象需要哪些实现类的方法,而且改起来也很方便,如果想更换实现,只需要改构造器中的名字就好,其他的地方都不用动,使得程序更加灵活。

收获: 尽量使用接口类型,在能使用的前提下,如果想用实现类中有独有的方法肯定不能用接口类型了,我们要更习惯于用接口类型

感谢老师解惑
参考文章
1
2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏晓星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值