什么情况下使用抽象类,什么情况下使用接口

在C#中
2025-01-21 00:55:18
推荐回答(3个)
回答1:

很有深度的问题,可是这个答案却是仁者见仁智者见智的,以下是我的一些愚见:

共同点是他们都可以实现多态。
不同点在于设计抽象类和接口的目的和使用方式有所不同,抽象类是为继承而精心设计的,接口则更多以组合的方式使用。

如果你的业务中可以抽象出一个通用的处理过程,只是某些局部传递的状态或参数有所不同,这时可以考虑使用抽象类。否则在一般的情况下,优先使用接口和组合的形式,这样使代码之间的耦合度降低。

一个比较典型的抽象类使用范例是模板模式,当然也有使用组合来实现的模板。另一个使用抽象类的情形,比如很多场合下特别是对一个声明了相当数量方法的接口,提供一个类似模板的默认实现类是很有好处的,比如spring提供的一些template,dom4j提供的VisitorSupport等。甚至在effective java里已经将这种方式提倡成一种最佳实践。

回答2:

接口和抽象类,都可以看做一个抽象的类型,而其他的类都可以看做是一个具体类
接口里面方法都是没有实现的,
抽象类里面可以有部分是实现的方法
设计原则里面有接口隔离原则 (面向抽象编程,不要面向具体编程)
当使用一个类是使用接口呢,还是继承? 取决于你的程序要求,如果一个抽象类有多个具体类,每个具体类都使用了同样的方法,那么可以考虑使用抽象类,在抽象里实现,其它类也就都有了同样的实现方法!!
是不是可以这样理解呢,接口是用来实现的,而抽象类呢我主要是用来使用父类的实现方法,否则就用接口吧!
开发过程中,用的比较的多的还有一种是接口和抽象的结合使用,
写一个接口,然后再写一个抽象类(implements 此接口), 在抽象类中实现部分方法,具体类继承此抽象类,实现此接口。

回答3:

抽象类:只有一个或几个方法需要定义成抽象方法,从而让子类来实现;其他方法有清晰、明确、共同的逻辑需要在本类中实现,由子类“共享”和“复用”。
接口:纯粹定义方法接口,所有方法都由实现该接口的类来实现。没有共享的公共逻辑,此时用接口比较合适。