Java--多态性之抽象类和接口

上一篇:多态性之上溯造型和下溯造型

抽象类(abstract)可以含有一个或多个抽象方法(只有方法的定义而没有方法的实现),也可以不含有抽象方法。如果想从一个抽象类继承,而且新类要实例化对象,则必须实现抽象类的所有抽象方法。否则,新类也是抽象类。

接口(interface)可以理解为纯抽象类。它完全禁止方法的实现。接口中的数据成员(字段)默认为static和final, 成员函数(方法)默认为public。所以在实现一个接口时,来自接口的方法必须也是public。

实现按一个接口要使用 implements(实现)关键字,其他操作和继承非常类似。

Java中的“多重继承”可以靠接口实现。因为Java中类只能单一继承而接口可以多继承。

如果一个新类同时要继承一个基础类和多个接口,基础类必须写在前面

class Student extends People implements Eat, Sleep{
    //...
}

接口扩展extends关键字:

interface Monster {
 void menace();
}
interface DangerousMonster extends Monster {
 void destroy();
}

使用接口的原因:

  • 能上溯造型至多个基础类
  • 防止其他人制作这个类的对象(和抽象类相同)

接口 or 抽象类?

若使用接口,我们可以同时获得抽象类以及接口的好处。所以假如想创建的基础类没有任何方法定义或者成员变量,那么就选择接口。事实上,如果事先知道某种东西会成为基础类,那么第 一个选择就是把它变成一个接口。只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。

接口的一个应用--常数分组

因为接口的字段都默认为final和static,所以很适合常数分组。例如:

public interface Months {
 int
 JANUARY = 1, FEBRUARY = 2, MARCH = 3,
 APRIL = 4, MAY = 5, JUNE = 6, JULY = 7,
 AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10,
 NOVEMBER = 11, DECEMBER = 12;
}

与C++的enum相似但不像enum那样拥有额外的类型安全性。不过比起直接将数字硬编码到程序中,这样实现起来的代码可读性更强。

下一篇:多态性之内部类和匿名类

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

窥探Swift之字符串(String)

  之前总结过Objective-C中的字符串《Objective-C精选字符串处理方法》,学习一门新语言怎么能少的了字符串呢。Swift中的String和Ob...

23860
来自专栏IT可乐

JDK1.8源码(一)——java.lang.Object类

  本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址。   首先介绍JDK中所有类的基类——java.lang.Object。   ...

790150
来自专栏每日一篇技术文章

Foundation-String

最近写完了Swift 3.0教程 ,在接下来这段时间,继续写Foundation 的教程,帮助大家更加深入,系统的学习Foundation 框架,可能会持续一段...

11010
来自专栏于晓飞的专栏

Java 泛型进阶

在 List<String> 中添加 Integer 将不会通过编译,但是List<Sring>与List<Integer>在运行时的确是同一种类型。

22830
来自专栏java思维导图

MySQL函数及用法示例(收藏大全)

1、字符串函数 ascii(str) 返回字符串str的第一个字符的ascii值(str是空串时返回0) mysql> select ascii('2...

9930
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第3章 Python的数据结构、函数和文件3.1 数据结构和序列3.2 函数3.3 文件和操作系统3.4 结论

本章讨论Python的内置功能,这些功能本书会用到很多。虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具...

48360
来自专栏orientlu

读 《C Traps and Pitfalls》Record

单引号实际代表一个整数 双引号代表指向无名数组的起始字符的指针(字符结尾 0) 使用库函数计算得到的字符串长度不包括结尾的0!

12130
来自专栏数据结构与算法

1470 数列处理

个人博客:doubleq.win 1470 数列处理  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 青铜 Bronze 题解 题目描述 D...

27650
来自专栏鸿的学习笔记

一句话讲明白基本排序

4620
来自专栏从流域到海域

《笨办法学Python》 第38课手记

《笨办法学Python》 第38课手记 注意这是第三版的《笨办法学Python》的内容,我后来发现第三版存在很大的问题,就放弃了第三版开始使用第四版,第四版的第...

36080

扫码关注云+社区

领取腾讯云代金券