《软件构造》抽象类与接口

之前总觉着,抽象类的功能接口也可以实现,特别是接口可以使用默认方法(default)(通过实现类的实例化调用)和静态方法(static)(通过接口名调用)后,好像抽象类就没什么用了一样,后来经过更多了解,发现虽然接口的应用更为广泛,但并不存在完全替代抽象类的说法,二者的设计目的和应用还是有一些区别的——
1.设计目的:
(1)二者都是抽象技术的体现,但是抽象类是对类抽象,而接口是对行为的抽象。我们可以让一个实现类实现多个接口以完成多个行为,但是我们并不能说继承多个抽象类。
(2)抽象类在设计上的很大一个目的是复用;而接口是为了制定规则制定协议。
2.(1)设计软件的时候,应当注意到实现类和接口是平等的,实现类只是实现了接口的定义,即使有多个接口,概念上也是一个平面的。而抽象类体现了一种继承关系,父类子类概念相同(比一个平面更高)。抽象类和接口就像“cat is a animal”和“cat like a animal”的区别。
(2)具体应用中,虽然接口有default方法,但是其本意并不是要我们实现复杂功能,在设计的时候就应当把多个子类的共有逻辑放到抽象类里面而不是接口。
(3)为了防止被实例化,我们可以将类定义为abstract。
3.接口没有成员变量、构造函数,但有全局静态常量,抽象类可以有普通方法,变量,常量,构造方法;接口只能public,抽象类不能private;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值