玩转Java接口(effect java 学习笔记 20、21、22)

本文探讨了Java接口与抽象类的区别,强调了接口在定义类型中的重要角色。Java 8引入的default方法和静态方法增强了接口的功能。default方法允许接口在不破坏现有实现的情况下添加新方法,而静态方法提供了类似于静态类成员的功能。文章还讨论了接口中的常量、骨架实现类以及如何避免常量接口模式的问题。
摘要由CSDN通过智能技术生成

一、前文摘要:

好看的皮囊千篇一律,有趣的灵魂万里挑一。我再来炒一份接口的冷饭,客官香吗?
本篇博客的主要内容简介如下:

  • 接口与抽象类的区别
  • 二者的优缺点,还有组合-抽象骨架类
  • 为后代设计接口-包含JDK 1.8的新特性,如default 方法
  • 接口仅用来定义类型(java常量安置:常量接口模式,枚举类,不可变实例类)

二、主要内容

1、谈谈接口和抽象类有什么区别?

接口和抽象类是Java面向对象设计的两个基础机制。

接口(Interface)是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离的目的。接口不能实例化;不能包含任何非常量成员,任何field都是隐含着public static final的意义;同时没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法(Java 8)。Java 标准库中,定义了非常多的接口。比如java.util.list。

抽象类(abstract class)是不能实例化的类,用abstract 关键字修饰class,其目的主要是代码重用。除了不能实例化,形式上和一般的java类没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取相关Java类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。Java标准库中,比如collection框架,很多通用部分就被抽取成抽象类,例如java.util.AbstractList。

Java 类实现 interface 使用 implements关键词,继承abstract class 则是使用extends关键词。

接口 抽象类
实例化 no no
常量成员 yes yes
非常量成员 no yes
抽象方法个数 ≥0 ≥0
构造方法 no yes
静态方法实现 java 1.8以后有 yes
普通方法 no yes
多继承 yes no
修饰符 public public,protected,default

抽象方法比接口速度要快,接口需要时间去寻找在类中的实现方法

ps:抽象方法是亲生的,接口是后娘养的

如果往抽象类中添加新的方法,你可以额外给它提供默认的实现,因此你不需要改变子类中的代码。如果你往接口中添加方法,那么你必须改变实现该接口的类。

2、二者的结合-骨架实现类

关于二者的优缺点,第一节有讲述过。相信大家还有印象,这里也就不在重述。

在effect java 一书中明确的表明接口是优于抽象类的。但是在实际开发过程中,只是单一使用接口往往是不够的。但是我们可以提供一个抽象的骨架实现类(abstract skeletal implementation class)来与接口一起使用,将接口和抽象类的优点接口起来。接口定义了类型,可能提供了一些默认的方法,而骨架实现类在原始接口方法的顶层实现了剩余的非原始接口方法。继承骨架实现需要大部分的工作来实现一个接口。这就是模板方法设计模式

按照惯例,骨架实现类被称为 AbstractInterface ,其中 I

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值