抽象类和接口有什么区别?
1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能继承一个父类,但是可以实现多个接口。
2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的(public static final)成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。
3、抽象类的子类可以部分实现父类中的抽象方法,但是它们本身也是抽象类; 而当类实现特殊接口时,它定义所有这种接口的方法。
4、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。
5、抽象方法可以有public、protected和default这些修饰符,接口方法默认修饰符是public,不可以使用其它修饰符。
6、添加新方法:如果往抽象类中添加新的方法,可以给它提供默认的实现,不需要改变现在的代码。如果往接口中添加方法,必须改变实现该接口的类
1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。
2. 如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
3. 如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
4. 如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。
时间: 2024-10-13 02:11:43