抽象类与接口的区别是什么?
抽象类是一种不能被实例化的类,它可以包含抽象方法和非抽象方法。抽象方法是没有具体实现的方法,必须在子类中被实现。抽象类主要用于为一组相关的类提供一个通用的模板,子类可以继承抽象类并实现其中的抽象方法,也可以使用抽象类中的非抽象方法。
接口则是一种更加纯粹的抽象类型。它只包含方法签名,没有方法体,所有的方法都是抽象的。接口用于定义一组规范,一个类可以实现多个接口来表明它遵循这些规范。
从语法上看,抽象类可以有构造方法,接口不能有构造方法。抽象类中的成员变量可以是各种访问修饰符,而接口中的成员变量默认是 public static final 的。抽象类中的方法可以有不同的访问修饰符,包括 private(在内部使用),而接口中的方法默认是 public。
在继承方面,一个类只能继承一个抽象类,但是可以实现多个接口。这体现了接口在设计上更侧重于行为规范的定义,让一个类能够具备多种行为能力。例如,在一个图形处理系统中,抽象类 “图形” 可以包含一些公共的属性和非抽象方法,如计算面积的方法(对于一些规则图形可以直接提供实现),而接口 “可绘制” 可以定义一个绘制图形的抽象方法,不同的图形类(如圆形、矩形)在继承