什么时候用接口,什么时候用抽象类?

来源:百度知道 编辑:UC知道 时间:2024/06/20 12:23:43
请用简洁的语言告诉我
有比较简单的例子也好啊

还有接口能实现的可以用抽象类实现么?
反过来呢?

接口和抽象类都能描述一般性的公有特征。一般来说,强是关系(strong is-a relationship)清晰地描述了父子关系,应该用类模拟,比如苹果是一种水果;而弱是关系(weak is-a relationship)是指对象具有某种属性,适合用接口模拟,比如苹果是可以吃的。

由于子类只能扩展一个父类,而能实现多个接口,所以接口比抽象类更灵活。但是接口不能包括具体的方法,而抽象类可以,要将两种好处结合起来,可以创建一个接口和一个实现该接口的抽象类(便利类),然后根据情况决定使用哪个。

接口不变性是指不改变接口的使用方法,但是可以改变接口的具体实现方法,而接口的实现对用户是透明的,用户不需要关心接口的实现,只要知道如何使用接口就行了,所以接口不变性为用户提供了便利。
抽象类也一样,内部实现可以因为需要而更改(比如改进了算法),但是提供给用户的使用方法不要轻易改变

接口是一种协定,抽象类则相当于类模板。

使用抽象类,而不要使用接口来分离协定与实现。
如果需要提供多态层次结构的值类型,使用接口。
如果一个类型必须实现多个协定,或者协定适用于多种类型,使用接口。

虽然抽象类和接口都支持将协定与实现分离开来,但接口不能指定以后版本中的新成员,而抽象类可以根据需要添加成员以支持更多功能。

优先考虑定义类,而不是接口。

后面的问题你看明白了上面这些就有答案了,如果可以互相取代何必搞两个概念出来呢

说一点我的理解 应该是接口能实现的抽象类也能实现
java只能实现单继承 所以用抽象类只能单继承
而接口可以实现多个接口 利用这可以实现类似c++的多重继承