如果需要保留已实现的方法和方法定义,我们将使用抽象类,而如果只需要保留方法定义,则使用接口。但在java和C#中,我们可以使用默认方法和静态方法在接口中包含实现。那么,如果我们可以通过使用接口来实现抽象类的目的,那么它有什么用呢?
拥有抽象类有一些原因。
抽象类可以继承接口,但不能继承接口
抽象类可以继承接口。但是,接口不能继承抽象类:
public interface ABar { }
public abstract class Bar : IFoo { }
但是,这不符合条件:
public interface IFoo : ABar
{
}
public abstract class ABar
{
}
抽象类可以有构造函数、字段(可以保存状态(
抽象类可以有构造函数、字段。通过具有字段,可以保持状态。但是,接口不能有它们。
public abstract class ABar
{
public int test; // some state
public ABar()
{
}
}