接 口
辽宁经济职业技术学院信息系
硕士、副教授 陈英
对象的意义
在 java语言中,对象就是对一组变量和
相关方法的封装,其中变量表明了对象
的状态,方法表明对象具有的行为。
通过对对象的封装,使用户不必关心对
象行为的实现细节,只要了解通过给定
的接口与对象进行交互就可以了。
通过对象封装,实现了模块化和信息隐
藏,有利于程序的可移植性和信息隐藏,
同时也有利于对象的管理。
多态性的意义
类的继承并不只是类的重复使用,即把它们作为基础
来定义新的类。因为它还可以为应用程序的开发带来
极大的灵活性,这是通过多态性的机制来实现的。
在 java语言中,多态性指的是一个特定类型的变量可
以用于引用不同类型的对象,并且自动调用该变量引
用的特定类型对象的方法。这样就使得一个方法的调
用根据该调用作用到的对象类型而出现不同的操作行
为。
多态性表现在派生的类对象身上。它必须在一个类的
层次结构中才可以实现新的功能。
为了在调用一个方法的时候获得多态性操作,必须使
该方法是基础类的一个成员,同时也是任何相关子类
的成员。
使用多态性的机制
子类对象的方法调用必须通过一个超类
的变量进行。
这个方法调用必须也是超类的一个成员。
子类的方法特征必须与超类相同。
子类方法的返回值必须与超类中的相同。
在子类中的方法访问限定符不能比超类
中的更严格。
注意:多态性只应用于方法,它不会用
于数据成员。
对象的转型
可以把一个对象转型为另一种类型,但是只能
在当前对象类型和新的类型位于相同派生类层
次结构中的时候进行,并且其中一个是另一个
的超类。
当执行具有多态性的方法时,会把对象存储在
一种基本类型的变量中,并且在一个子类中调
用该方法。这时一般都要涉及到把子类对象转
型为基本类。
另一个原因是可能想在类层次结构中向上转型,
以便把多种可能出现的子类对象传递到一个方
法。通过指定一个超类作为类型的形式参数,
可以灵活地把任何派生出来的类对象作为参数
传递过来。
接口的概念
在 Person类派生得到的类中,有一个普通的
getDescription()方法在每个子类中分别实现。
各类中方法特征相同,并且这个方法可以接受
多态方式的调用。
当你希望一组方法能在多个不同的类中实现,
以便你能够多态地调用它们的时候,你就可以
省去基础类。
通过使用 java的一种接口 (interface)机制能更方
便地实现这种最终结果。接口表明了它的主要
用途,就是指定一组方法表示一个特定的类接
口,使创新可以在许多不同的类中分别实现。
这样所有相关的类都可以共享这个普通的接口,
并且其中的方法可以被多态调用。
接口的概念
在 java语言中,一个接口不是一个类,而是对符
合需求的类型一套规范。
接口是抽象类的变体。它 实际上就是一组常量和
抽象方法。接口永远不能有实例字段,并且在接
口中方法不会被实现。
接口中的所有方法都是抽象的,没有一个有程序
体。
接口中的方法总是 public和 abstract型的;接口
中的常量总是 public,static和 final型的。
接口的好处是,它给出了屈从于 Java技术单继承
规则的假象。当类定义只能扩展出单个类时,它
能实现所需的多个接口。
接口的定义与实现
下例表示一个简单的接口和实现它的一个类:
interface SayHello {
void printMessage();
}
class SayHelloImpl implements SayHello {
void printMessage() {
System.out.println("Hello");
}
}
如果你的类
符合一个特
定接口,那
我将执行服
务。
interface SayHello强制规定, 实现它的所有的
类必须有一个称做 printMessage的方法, 该方法
带有一个 void返回类型且没有输入参数 。
实现接口
若要一个类实现一个接口,需要采取下面
两个步骤:
1) 声明类需要实现指定接口。
2) 提供接口中所有方法的定义。
接口的实现与子类相似, 除了该实现类不
能从接口定义中继承行为 。 当类实现特殊
接口时, 它定义 ( 即, 将程序体给予 ) 所
有这种接口的方法 。 然后, 它可以在实现
了该接口的类的任何对象上调用接口的方
法 。 由于有抽象类, 它允许使用接口名作
为引用变量的类型 。
实现接口
声明一个类实现一个接口需要使用 implements关
键字。
例,class Employee implements Comparable
提供实例字段和方法实现是实现接口类的任务。
为了使用一个接口,你可以在类中实现这个接口,
也就是声明一个类实现相应的接口,并且为接口
声明的每个方法编写代码,作为类定义的一部分。
当一个类实现一个接口的时候,我们在接口中定
义的任何常量都可以直接在类中使用,就像它们
是由一个基础类继承而来的一样。
接口的属性
? 接口不是类。永远不能使用 new操作符来实例化
一个接口,x = new Comparable(…); //error
? 尽管不能构造一个接口对象,但是仍可能声明一
个接口变量。 Comparable x; //ok
? 一个接口变量必须指向一个实现了该接口的类的
对象,x = new Employee(…) ; //ok 提供了雇员接口
? 然后,可以使用 instanceof来检查一个对象是否实
现了一个接口,
? if (anObject instanceof Comparable){…}
接口的属性
同建立继承类关系一样,可以扩展接口。允许将
接口的通用性逐步扩展到专门性。
为了定义一个包含多个其他接口成员的接口,你
可以指定这些接口的名字,用逗号分隔,然后是
关键字 extends。例:
public interface MyInterface extends HisIntreface,HerInterface{…};
一个类只能有一个超类,但是一个类能够实现多
个接口。
接口是一种有力的设计工具,它对于代码重用特
别有帮助。
接口与多重继承
Java用接口实现比多重继承更强的功能。多重继承是指
一个类可以为多个类的子类,它使得类的层次关系不清
楚,而且当多个父类同时拥有相同的成员变量和方法时,
子类的行为是不容易确定 的,这给编程带来了困难。
单一继承则清楚地表明了类的层次关系,指明父类和子
类各自的行为。
接口则把方法的定义和类的层次区分开来,通过它可以
在运行时动态地定位所调用的方法。
接口可以实现“多重继承”,即一个类可以实现多个接
口。正是这些机制使得接口提供了比多重继承更简单、
更灵活、更强劲的功能。
辽宁经济职业技术学院信息系
硕士、副教授 陈英
对象的意义
在 java语言中,对象就是对一组变量和
相关方法的封装,其中变量表明了对象
的状态,方法表明对象具有的行为。
通过对对象的封装,使用户不必关心对
象行为的实现细节,只要了解通过给定
的接口与对象进行交互就可以了。
通过对象封装,实现了模块化和信息隐
藏,有利于程序的可移植性和信息隐藏,
同时也有利于对象的管理。
多态性的意义
类的继承并不只是类的重复使用,即把它们作为基础
来定义新的类。因为它还可以为应用程序的开发带来
极大的灵活性,这是通过多态性的机制来实现的。
在 java语言中,多态性指的是一个特定类型的变量可
以用于引用不同类型的对象,并且自动调用该变量引
用的特定类型对象的方法。这样就使得一个方法的调
用根据该调用作用到的对象类型而出现不同的操作行
为。
多态性表现在派生的类对象身上。它必须在一个类的
层次结构中才可以实现新的功能。
为了在调用一个方法的时候获得多态性操作,必须使
该方法是基础类的一个成员,同时也是任何相关子类
的成员。
使用多态性的机制
子类对象的方法调用必须通过一个超类
的变量进行。
这个方法调用必须也是超类的一个成员。
子类的方法特征必须与超类相同。
子类方法的返回值必须与超类中的相同。
在子类中的方法访问限定符不能比超类
中的更严格。
注意:多态性只应用于方法,它不会用
于数据成员。
对象的转型
可以把一个对象转型为另一种类型,但是只能
在当前对象类型和新的类型位于相同派生类层
次结构中的时候进行,并且其中一个是另一个
的超类。
当执行具有多态性的方法时,会把对象存储在
一种基本类型的变量中,并且在一个子类中调
用该方法。这时一般都要涉及到把子类对象转
型为基本类。
另一个原因是可能想在类层次结构中向上转型,
以便把多种可能出现的子类对象传递到一个方
法。通过指定一个超类作为类型的形式参数,
可以灵活地把任何派生出来的类对象作为参数
传递过来。
接口的概念
在 Person类派生得到的类中,有一个普通的
getDescription()方法在每个子类中分别实现。
各类中方法特征相同,并且这个方法可以接受
多态方式的调用。
当你希望一组方法能在多个不同的类中实现,
以便你能够多态地调用它们的时候,你就可以
省去基础类。
通过使用 java的一种接口 (interface)机制能更方
便地实现这种最终结果。接口表明了它的主要
用途,就是指定一组方法表示一个特定的类接
口,使创新可以在许多不同的类中分别实现。
这样所有相关的类都可以共享这个普通的接口,
并且其中的方法可以被多态调用。
接口的概念
在 java语言中,一个接口不是一个类,而是对符
合需求的类型一套规范。
接口是抽象类的变体。它 实际上就是一组常量和
抽象方法。接口永远不能有实例字段,并且在接
口中方法不会被实现。
接口中的所有方法都是抽象的,没有一个有程序
体。
接口中的方法总是 public和 abstract型的;接口
中的常量总是 public,static和 final型的。
接口的好处是,它给出了屈从于 Java技术单继承
规则的假象。当类定义只能扩展出单个类时,它
能实现所需的多个接口。
接口的定义与实现
下例表示一个简单的接口和实现它的一个类:
interface SayHello {
void printMessage();
}
class SayHelloImpl implements SayHello {
void printMessage() {
System.out.println("Hello");
}
}
如果你的类
符合一个特
定接口,那
我将执行服
务。
interface SayHello强制规定, 实现它的所有的
类必须有一个称做 printMessage的方法, 该方法
带有一个 void返回类型且没有输入参数 。
实现接口
若要一个类实现一个接口,需要采取下面
两个步骤:
1) 声明类需要实现指定接口。
2) 提供接口中所有方法的定义。
接口的实现与子类相似, 除了该实现类不
能从接口定义中继承行为 。 当类实现特殊
接口时, 它定义 ( 即, 将程序体给予 ) 所
有这种接口的方法 。 然后, 它可以在实现
了该接口的类的任何对象上调用接口的方
法 。 由于有抽象类, 它允许使用接口名作
为引用变量的类型 。
实现接口
声明一个类实现一个接口需要使用 implements关
键字。
例,class Employee implements Comparable
提供实例字段和方法实现是实现接口类的任务。
为了使用一个接口,你可以在类中实现这个接口,
也就是声明一个类实现相应的接口,并且为接口
声明的每个方法编写代码,作为类定义的一部分。
当一个类实现一个接口的时候,我们在接口中定
义的任何常量都可以直接在类中使用,就像它们
是由一个基础类继承而来的一样。
接口的属性
? 接口不是类。永远不能使用 new操作符来实例化
一个接口,x = new Comparable(…); //error
? 尽管不能构造一个接口对象,但是仍可能声明一
个接口变量。 Comparable x; //ok
? 一个接口变量必须指向一个实现了该接口的类的
对象,x = new Employee(…) ; //ok 提供了雇员接口
? 然后,可以使用 instanceof来检查一个对象是否实
现了一个接口,
? if (anObject instanceof Comparable){…}
接口的属性
同建立继承类关系一样,可以扩展接口。允许将
接口的通用性逐步扩展到专门性。
为了定义一个包含多个其他接口成员的接口,你
可以指定这些接口的名字,用逗号分隔,然后是
关键字 extends。例:
public interface MyInterface extends HisIntreface,HerInterface{…};
一个类只能有一个超类,但是一个类能够实现多
个接口。
接口是一种有力的设计工具,它对于代码重用特
别有帮助。
接口与多重继承
Java用接口实现比多重继承更强的功能。多重继承是指
一个类可以为多个类的子类,它使得类的层次关系不清
楚,而且当多个父类同时拥有相同的成员变量和方法时,
子类的行为是不容易确定 的,这给编程带来了困难。
单一继承则清楚地表明了类的层次关系,指明父类和子
类各自的行为。
接口则把方法的定义和类的层次区分开来,通过它可以
在运行时动态地定位所调用的方法。
接口可以实现“多重继承”,即一个类可以实现多个接
口。正是这些机制使得接口提供了比多重继承更简单、
更灵活、更强劲的功能。