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)如果基本功能在不断的改变,那么就需要使用抽象类(接口方法的改变需要改变所有实现了该接口的方法的类。抽象类不需要)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值