Java中 abstract class 和 interface 的区别(面试常问)

1、语法区别

1)抽象类可以有构造方法;接口不能有构造方法
2)抽象类可以有普通成员变量;接口没有普通成员变量
3)抽象类可以包含非抽象的普通方法;接口所有方法必须是抽象的
4)抽象类的抽象方法访问修饰符为public、protected和default;接口的抽象方法只能是public类型,默认为 public abstract
5)抽象类可以包含静态方法;接口不能包含静态方法
6)抽象类的静态成员变量的访问类型可以是任意的;接口的变量默认为public static final 类型
7)一个类可以实现多个接口,只能继承一个抽象类
8)速度:抽象类比接口速度快,因为接口需要时间寻找类实现的方法

特别提醒:面试中问到抽象类和接口的区别,就从以下六方面进行回答:构造方法、普通成员变量、方法(包括抽象方法)、静态变量、静态方法、继承性

2、特点

1)抽象类只能继承,不能实现
2)接口是设计的结果;抽象类是重构的结果

3、应用场景

接口更多是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约

抽象类更多是在代码实现方面发挥作用,用于实现代码的重用

应用场景:
1)如果拥有一些方法并且想让它们中的一些有默认实现,使用抽象类
2)如果想实现多重继承,必须使用接口(Java不支持多继承,但可以支持实现多个接口)
3)如果基本功能在不断的改变,那么就需要使用抽象类(接口方法的改变需要改变所有实现了该接口的方法的类。抽象类不需要)

你可能感兴趣的:(java)