接口是否可以定义非抽象方法_抽象类和接口的区别?

5f34bab694481b664f0e1f3e3c181199.png

这道题想考察什么?

1.是否熟悉抽象类和接口的定义,区别?

2.是否熟悉 Java 8 之后的接口变化?

考察的知识点

1.抽象类和接口的定义,区别

2.Java 8 之后的接口变化

考生应该如何回答

1、考生首先应该回答抽象类和接口的定义和区别,接口和抽象类是 Java 面向对象设计的两个基础机制。

接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。

Java 标准类库中,定义了非常多的接口,比如 java.util.List。

抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化,形式上和一般的 Java 类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。

抽象类大多用于抽取相关 Java 类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。Java 标准库中,比如 collection 框架,很多通用部分就被抽取成为抽象类,例如 java.util.AbstractSequentialList。

Java类实现接口 interface 使用 implement 关键字,继承抽象类 abstract class 则是使用 extends 关键字。我们可以参考Java 中的 LinkedList 的实现方式:

public class LinkedList    extends AbstractSequentialList    implements List, Deque, Cloneable, java.io.Serializable{

下面来说一下两者的区别(暂不包含 Java 8 及其以上版本):

  • 支持多重继承:接口支持;抽象类不支持;

  • 支持抽象函数:接口语义上支持;抽象类支持;

  • 允许函数实现:接口不允许;抽象类支持;

  • 允许实例化:接口不允许;抽象类不允许;

  • 允许部分函数实现:接口不允许;抽象类允许;

  • 定义的内容:接口中只能包括 public 函数以及 public static final 常量;抽象类无任何限制。

  • 使用时机:当想要支持多重继承,或是为了定义一种类型请使用接口;当打算提供带有部分实现的“模板”类,而将一些功能需要延迟实现请使用抽象类;

2、从 Java 8 开始,interface 增加了对 default method 的支持。Java 9 以后,甚至可以定义 private default method。Default method 提供了一种二进制兼容的扩展已有接口的办法。比如,我们熟知的 java.util.Collection,它是 collection 体系的 root interface,在 Java 8 中添加了一系列 default method,主要是增加 Lambda、Stream 相关的功能。前面提到的类似 Collections 之类的工具类,很多方法都适合作为 default method 实现在基础接口里面。

public interface Collection<E> extends Iterable<E> {    /**    * Returns a sequential Stream with this collection as its source     * ...    **/    default Streamstream() {        return StreamSupport.stream(spliterator(), false);    }}

总结

考生回答该问题时应该对抽象类和接口的定义有清晰的认知,知道两者之间的区别和使用场景,同时也要注意Java 8 之后接口是允许有方法实现的。

7b203d7fb7864d70901714bcff7f77d5.png

fbbc4e881a18865c7f592713865af02c.gif分享、在看与点赞都在这儿点下给小编加点料 bf9119ce5deb3fd5e80a89a4bff4e826.gif
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值