Java抽象类和接口的区别及练习题解析

本文详细比较了Java中的抽象类和接口,包括它们的共同点(都不能实例化,包含抽象方法)、区别(抽象类的构造方法、非抽象方法、静态方法和继承限制,以及接口的默认方法、静态方法、成员变量类型等),并提供了练习题答案解析。
摘要由CSDN通过智能技术生成

抽象类和接口

共同点

  1. 都不能被实例化
  2. 都可以包含抽象方法(抽象方法: 用 abstract 关键字修饰的方法)

区别

  1. 抽象类定义的关键字是 abstract class ,接口定义的关键字是 interface
  2. 是否允许包含非抽象方法:抽象类中允许同时存在抽象方法和非抽象方法;而接口 JDK1.8 之前只能有抽象方法,但是 JDK1.8 的时候,允许有 default 默认方法
// 抽象类
abstract class A{
    // 抽象方法
    abstract void add();

    // 非抽象方法
    void sub(){}
}
// 接口
interface B {
    // 默认方法
    default void add() {

    }
}
  1. 是否存在构造方法:抽象类可以有构造方法,但不能使用 abstract 修饰;而接口没有构造方法
  2. 访问修饰符不同:抽象类中的抽象方法可以用 public、protected、default 修饰;接口默认是public、不能用别的修饰符去修饰(接口中的变量被隐式指定为 public static final,方法被隐式指定为 public abstract)。注意 JDK 1.8 可以有 default 方法
// 接口
interface D {
    int num = 1; // 等价于 public static final int num = 1;

    void add(); // 等价于 public abstract void add();

    default void sub() {

    }
}
  1. 是否可包含静态方法:抽象类可以有非抽象的 static 方法,但不允许有抽象 static 方法;接口在 JDK1.8(即 Java8)时才有 static 方法。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的
  3. 单继承,多实现。抽象类只能继承一个父类,因为 Java 的类是单继承的;而一个接口可以继承多个父接口,同时,一个类可以实现多个接口。
  4. 抽象类主要用于代码复用,强调的是所属关系。接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。

练习题

以下的练习题来自牛客网

1. (多选题)Java7特性中,abstract class和interface有什么区别。
A. 抽象类可以有构造方法,接口中不能有构造方法
B. 抽象类中可以有普通成员变量,接口中没有普通成员变量
C. 抽象类中不可以包含静态方法,接口中可以包含静态方法
D. 一个类可以实现多个接口,但只能继承一个抽象类。

2. (多选题)在JDK1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些?
A. 抽象类中可以有普通成员变量,接口中没有普通成员变量。
B. 抽象类和接口中都可以包含静态成员常量。
C. 一个类可以实现多个接口,但只能继承一个抽象类
D. 抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。

3.(多选题)jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?
A. 抽象类可以有构造方法,接口中不能有构造方法
B. 抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C. 一个类可以实现多个接口,但只能继承一个抽象类
D. 接口中可以有普通成员变量,抽象类中没有普通成员变量

答案解析

1. ABD
ABD 均正确。C 错误,抽象类中可以包含静态方法,在 JDK1.7(Java7)接口中不能包含静态方法,JDK1.8 之后可以包含。

2. ABCD
在 JDK1.7 中,ABCD 的说法都是正确的。

3. BD
在 JDK1.8 中,接口可以有非抽象的方法,如 default、static 方法,所以B是错的。抽象类可以有普通成员变量,所以 D 错误。

参考

B站视频
javaguide
牛客网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值