《Android游戏开发详解》一3.3 接口

简介: 接下来,我们介绍一种方法,使用所谓的接口(interface),将对象分组为不同的类别。接口是一个抽象(abstract)的类别,它描述了属于该类别的对象的基本组成部分。为了更好地理解这一点,我们来学习一个实例。

本节书摘来异步社区《Android游戏开发详解》一书中的第3章,第3.3节,作者: 【美】Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.3 接口

Android游戏开发详解
接下来,我们介绍一种方法,使用所谓的接口(interface),将对象分组为不同的类别。接口是一个抽象(abstract)的类别,它描述了属于该类别的对象的基本组成部分。为了更好地理解这一点,我们来学习一个实例。

接口和类相似,但是,它有一些显著的区别。如下所示是一个Human接口的样子。

程序清单3.8 Human接口

public interface Human {
    public void eat();

    public void walk();

    public void urinate(int duration); 
}

正如程序清单3.8所示,接口包含了各种抽象(abstract)的方法,它们没有方法体。这些没有方法体的抽象方法告诉我们,一个Human的对象分类必须能够做什么,但它们没有指定必须要如何实现这些操作。

为了说明接口实际上是什么,让我们先不要看代码。在你的脑海里,想象一下作为一个人类意味着什么(你不必变得太富有哲理)。接下来,我们看看如下的列表,告诉我是否每个人都满足你对于人类的看法:你的邻居、你最好的朋友和你自己。

对于所有这些人,你可能会回答是的。这是因为,当我们让你想一下对人类的看法的时候,你不会认为这是某一个个别的人。相反,你会形成某种规则,即一个人如何与他的世界交互,并且使用这种思路来判定不同人的人类特性。

接口大体上也是如此。程序清单3.8中的Human接口,不是用来创建单个的Human对象的。相反,它定义了一个交互的模式,阐述了一个Human对象在你的程序中应该具有什么样的行为。它提供了一组基本的要求,如果要创建Human类型的更多的具体版本(如King类)的话,必须要满足这些需求,如程序清单3.9所示。

程序清单3.9 King类

public class King implements Human {
 public void eat() {
    System.out.println("The King eats."); 
 }
 public void walk() {
    System.out.println("The King walks."); 
 }
 public void urinate(int duration) {
    System.out.println("The King urinates for " + duration + " minutes."); 
 }

 public void rule() {
     System.out.println("The King reigns."); 
 }


}

研究一下King类和Human接口之间的关系,你会注意到一些事情。首先,King类声明了它实现了Human接口,作为程序员,我们就是这样指定想要让King类属于Human这个分类的。其次,King类声明了程序清单3.8中给出的Human接口中的所有3个方法,并且这个类为这些前面的抽象方法中的每一个都提供了一个具体的方法体。第三,King类有一个额外的名为rule()的方法,这将其与泛型的Human区分开来。

接口是一系列的协议。如果选取了一个对象来实现一个接口,该对象同意实现接口中的每一个抽象方法。这意味着什么呢?这意味着,一个King对象,不管他想要保持多么神秘,都必须实现所有的Human接口的抽象方法,包括urinate()方法,因为国王毕竟也是人。如果不满足这一需求,愤怒的JVM将会向他显示红色的错误消息。

相关文章
|
3月前
|
Linux Android开发
Android 正常运行所需的一系列 Linux 内核接口
Android 正常运行所需的一系列 Linux 内核接口
53 0
|
4月前
|
XML JSON Java
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
148 0
|
4月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
39 0
|
4月前
|
XML Java 定位技术
Android Studio App开发之网络通信中使用GET方式调用HTTP接口的讲解及实战(附源码 超详细必看)
Android Studio App开发之网络通信中使用GET方式调用HTTP接口的讲解及实战(附源码 超详细必看)
56 0
|
5月前
|
IDE 网络安全 开发工具
安卓模拟器接口抓包教程
用uni-app开发安卓应用时,查看接口数据不能像在浏览器中可以直接通过network查看,只能借助抓包工具来抓包,还有一些线上应用我们也只能通过抓包来排查具体的问题
324 0
|
5月前
|
Android开发
androidのretrofit2调用接口
androidのretrofit2调用接口
32 0
|
8月前
|
Java Android开发
Android 中通过Intent传递类对象,通过实现Serializable和Parcelable接口两种方式传递对象
Android 中通过Intent传递类对象,通过实现Serializable和Parcelable接口两种方式传递对象
76 1
|
10月前
|
Android开发 C++
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
125 0
|
11月前
|
XML 数据格式
Android_点击事件(实现接口OnClickListener)
关于每个Fragment里面都会有点击事件,如果一个Fragment里面很多控件有点击事件,那么就让这个Fragment类实现点击事件接口,例如
96 0
|
12月前
|
Java 数据库 Android开发
Android MTK平台 客制化系统来电界面(屏蔽 InCallUI 提供接口给客户自行展示来电去电页面)
Android MTK平台 客制化系统来电界面(屏蔽 InCallUI 提供接口给客户自行展示来电去电页面)
155 0