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

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将会向他显示红色的错误消息。

时间: 2024-09-13 16:59:39

《Android游戏开发详解》一3.3 接口的相关文章

《Android游戏开发详解》一2.20 对象的更多实践——模拟一个色子

2.20 对象的更多实践--模拟一个色子 Android游戏开发详解 在我们的下一个项目中,将模拟一个六面色子的滚动.色子会出现在许多现代的桌上游戏中,因为它们增添了不可预期的因素,如图2-26所示.在本节中,我们将展示在Java程序中如何模拟这种随机性. 我们首先创建一个名为"DiceProject"的新的Java项目.其中,创建一个名为DiceMaker的新的类,并且像通常一样给它一个main方法. 要产生一个随机数,我们必须使用Java库中名为Random的一个内建类.我们使用熟

《Android游戏开发详解》——第2章,第2.20节对象的更多实践——模拟一个色子

2.20 对象的更多实践--模拟一个色子 Android游戏开发详解 在我们的下一个项目中,将模拟一个六面色子的滚动.色子会出现在许多现代的桌上游戏中,因为它们增添了不可预期的因素,如图2-26所示.在本节中,我们将展示在Java程序中如何模拟这种随机性. 我们首先创建一个名为"DiceProject"的新的Java项目.其中,创建一个名为DiceMaker的新的类,并且像通常一样给它一个main方法. 要产生一个随机数,我们必须使用Java库中名为Random的一个内建类.我们使用熟

《Android游戏开发详解》——第1章,第1.3节声明和初始化变量

1.3 声明和初始化变量 Android游戏开发详解 所有的基本数据类型(和字符串)都可以表示为变量.它们都是使用相同的基本语法来声明(创建)的. 创建一个新的变量的时候,我们总是要声明两件事情:变量的数据类型(data type)和变量的名称(variable name).在大多数情况下,我们还使用赋值运算符(assignment operator,即=)给变量指定一个初始值.有两种方法做到这点.第一种方法是指定一个字面值(literal value),例如,图1-1所示的'J'.第二种方法是

《Android游戏开发详解》一2.5 魔术揭秘——编译器和JVM

2.5 魔术揭秘--编译器和JVM Android游戏开发详解 在我们点击运行按钮和出现"Hello, world-?"之间,发生了什么事情.不管你是否相信,所有的事情都是在幕后进行的.当我们编写源代码的时候,Java编译器会编译它,这意味着,它会检查代码潜在的错误并将其转换为只有机器能够理解的语言.这个机器,就是执行代码并把想要的文本打印到控制台的Java虚拟机(Java Virtual Machine,JVM).如图2-18所示. JVM是一个虚拟的机器.它运行于操作系统之上,并且

《Android游戏开发详解》一2.2 设置开发机器

2.2 设置开发机器 Android游戏开发详解 在开始编写简单点的Java程序和构建令人兴奋的游戏之前,我们必须在自己的机器上安装一些软件.然而,这个过程有点枯燥且颇费时间,但是,为了让第一个程序开始运行,这些代价都是值得的. 2.2.1 安装Eclipse 我们将利用一个集成开发环境(Integrated Development Environment,IDE)来编写Java/Android应用程序.IDE是一种工具的名称,它能够帮助我们轻松地编写.构建和运行程序. 我们将要使用的IDE叫作

《Android游戏开发详解》——第2章,第2.2节设置开发机器

2.2 设置开发机器 Android游戏开发详解 在开始编写简单点的Java程序和构建令人兴奋的游戏之前,我们必须在自己的机器上安装一些软件.然而,这个过程有点枯燥且颇费时间,但是,为了让第一个程序开始运行,这些代价都是值得的. 2.2.1 安装Eclipse 我们将利用一个集成开发环境(Integrated Development Environment,IDE)来编写Java/Android应用程序.IDE是一种工具的名称,它能够帮助我们轻松地编写.构建和运行程序. 我们将要使用的IDE叫作

《Android游戏开发详解》——第1章,第1.7节控制流程第1部分——if和else语句

1.7 控制流程第1部分--if和else语句 Android游戏开发详解 我们现在把注意力转向控制流程(control flow ,也称为流程控制,flow control),这指的是代码行将要按照什么样的顺序执行.还记得代码执行的基本规则吧,它是说代码要从上到下地执行.在最简单的程序中,代码真的是按照线性方式从上向下执行的.然而,在任何有用的程序中,我们可能会看到,根据某些条件,会跳过一些代码行甚至重复执行一些代码行.让我们来看一些例子. 1.7.1 if-else语句块 if-else语句

《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句

1.7 控制流程第1部分--if和else语句 Android游戏开发详解 我们现在把注意力转向控制流程(control flow ,也称为流程控制,flow control),这指的是代码行将要按照什么样的顺序执行.还记得代码执行的基本规则吧,它是说代码要从上到下地执行.在最简单的程序中,代码真的是按照线性方式从上向下执行的.然而,在任何有用的程序中,我们可能会看到,根据某些条件,会跳过一些代码行甚至重复执行一些代码行.让我们来看一些例子. 1.7.1 if-else语句块 if-else语句

《Android游戏开发详解》一1.2 数据类型

1.2 数据类型 Android游戏开发详解 1.2.1 基本类型 在前面的示例中,我们看到了数据类型(data type)的例子.例如,在程序清单1.1中,我们使用了整数值(integer value)5和6,这两个都是数值数据的例子.我们来看看其他的数据类型,先介绍其他的数值类型. 可以使用4种类型来表示整数(Integer),每种类型都用不同的大小.在Java中,我们有8位的byte.16位的short.32位的int和64位的long.4种类型中的每一种,都可以保存正的和负的整数值. 有

《Android游戏开发详解》一1.4 关于位的一切(位和字节的简单介绍)

1.4 关于位的一切(位和字节的简单介绍) Android游戏开发详解 在我们继续深入之前,值得先细致地介绍如何具体把值存储到变量中.我前面提到,不同的基本数据类型具有不同的位大小.例如,一个int有32位而一个long有64位.你可能会问,那么,到底什么是位? 位(bit)是一个二进制位的简称.换句话说,如果你有一个只有0和1的二进制数,每个数字就是1位.达到8位的时候,例如,(10101001),你就有了1字节. 对于位,你需要记住的一点是:拥有的位越多,所能表示的数值也越多.为了说明这一点