“全栈2019”Java第八十三章:内部类与接口详解

106 阅读6分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.类中嵌套接口

上一章我们学过如何在类中嵌套接口,接下来来看看外部类能否访问接口中的成员,如何访问的问题。

首先,我们回顾一下如何在类中嵌套接口。

演示:

请定义一个外部类Outer,然后在Outer类里面定义一个接口。

请观察程序代码。

代码:

Outer类:

“全栈2019”Java第八十三章:内部类与接口详解

2.类中嵌套的类被称之为内部类

前面我们学习过,在类里面可以嵌套类,那个嵌套类被称之为内部类。下面,我们来回顾一下之前学习的内部类。

演示:

请定义一个外部类Outer,在外部类Outer里面定义一个内部类Inner,分别在Main类的main()方法中创建外部类对象和内部类对象。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第八十三章:内部类与接口详解

Main类:

“全栈2019”Java第八十三章:内部类与接口详解

结果:

“全栈2019”Java第八十三章:内部类与接口详解

3.内部类与接口

内部类能否实现接口呢?我们来试试。

演示:

请定义一个外部类Outer,在外部类Outer中定义一个内部类Inner。定义一个接口Computable,其中有一个抽象方法comput。内部类Inner实现其Computable接口。

在Main类的main()方法中创建外部类Outer对象和内部类Inner对象,内部类Inner对象调用其comput方法。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第八十三章:内部类与接口详解

Computable接口:

“全栈2019”Java第八十三章:内部类与接口详解

Main类:

“全栈2019”Java第八十三章:内部类与接口详解

结果:

“全栈2019”Java第八十三章:内部类与接口详解

从运行结果来看,完全正确。内部类是可以实现接口的。如果将接口移至类里面,内部类将与嵌套接口又会有怎样的关系呢?

下面我们将介绍的是内部类与嵌套接口之间的关系。

4.内部类与嵌套接口只能是静态成员之间的互访

内部类有四种形式:非静态内部类、静态内部类、抽象内部类、静态抽象内部类。

这里呢,只演示非静态内部类即可。非静态内部类里面不可以定义静态成员,但是除静态常量外。所以呢,要定义静态成员则可以声明为静态内部类。

演示:

请定义一个外部类Outer,在外部类Outer中定义一个内部类Inner和一个嵌套接口Computable,然后在内部类Inner中定义一个静态常量,在嵌套接口Computable中定义一个静态常量和一个静态方法。最后,在内部类Inner的构造方法中显示输出嵌套接口Computable里的静态常量并调用其静态方法;在嵌套接口Computable的静态方法中显示输出内部类Inner里的静态常量。

在Main类main()方法中创建外部类Outer对象和内部类Inner对象,然后使用外部类类名调用嵌套接口名,再使用嵌套接口名调用其静态方法。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第八十三章:内部类与接口详解

Main类:

“全栈2019”Java第八十三章:内部类与接口详解

结果:

“全栈2019”Java第八十三章:内部类与接口详解

从运行结果来看,程序没有任何错误,完全正确。这里再说明一下,如果你想要定义类变量和类方法则需要将内部类声明为静态内部类,因为内部类里面不能定义类变量、类方法和静态最终方法,只能定义静态常量。

5.内部类实现嵌套接口

演示:

请定义一个外部类Outer,在外部类Outer中定义一个内部类Inner和一个嵌套接口Computable,然后在嵌套接口Computable中定义一个静态常量、一个抽象方法、一个默认方法和一个静态方法,内部类Inner实现嵌套接口Computable。最后,在内部类Inner的构造方法中显示输出嵌套接口Computable里的静态常量并调用其静态方法。

在Main类main()方法中创建外部类Outer对象和内部类Inner对象,然后使用内部类Inner对象调用其实现的两个方法。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第八十三章:内部类与接口详解

Main类:

“全栈2019”Java第八十三章:内部类与接口详解

结果:

“全栈2019”Java第八十三章:内部类与接口详解

从运行结果来看,完全正确。也就是说,内部类可以实现嵌套接口。

6.内部类与嵌套接口的应用场景

当我们需要将类和接口定义在另一个类的内部时,就可以应用内部类和嵌套接口。例如,公司里面有技术部和人力资源部,他们都有绩效考核,那么绩效考核作为两个部分的公共部分可以抽取出来作为一个接口。但是这个绩效考核属于公司内部,所以我们这个接口也应该定义在描述公司的这个类里面。如果我们把技术部类和人力资源部类都定义在公司类里面,它们两个就是内部类。

好,按照上述场景,我们来实现试试。

演示:

请定义一个外部类Company,在外部类Company里面定义两个内部类TechnologDepartment和HRDepartment,再定义一个嵌套接口KPI。接着,在嵌套接口中定义一个绩效考核方法kpi()。最后两个内部类实现嵌套接口KPI。

请在Main类的main()方法中创建外部类Company对象,然后再创建两个内部类对象并调用其kpi()方法。

请观察程序运行结果。

代码:

Company类:

“全栈2019”Java第八十三章:内部类与接口详解

Main类:

“全栈2019”Java第八十三章:内部类与接口详解

结果:

“全栈2019”Java第八十三章:内部类与接口详解

从运行结果来看,我们的程序没有任何问题。内部类与嵌套接口的应用场景有很多,后面我们在开发的过程有可能还会遇见更多的内部类实现嵌套接口的案例。

总结

  • 内部类可以实现接口。
  • 内部类可以实现嵌套接口。
  • 内部类与嵌套接口之间直接互访只能是静态成员。

至此,Java中内部类与接口相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第八十二章:嵌套接口能否访问外部类里的成员?

下一章

“全栈2019”Java第八十四章:接口嵌套接口详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第八十三章:内部类与接口详解

版权声明

原创不易,未经允许不得转载!