Java的接口及用法

来自CloudWiki
Cloud17讨论 | 贡献2018年3月27日 (二) 14:43的版本 接口与多态
跳转至: 导航搜索

接口的概念

Java 程序设计中的接口(Interface)也是一种规范,是用来组织应用程序中的类,并调节它们的相互关系。接口是由常量和抽象方法组成的特殊类,是对抽象类的进一步抽象,形成了一个属性和行为的介绍集合,该集合通常代表了一组功能的实现。

【提 示】 在最早期的面向对象语言中不是使用interface关键字,而是使用protocol。从这个词汇中可以看出接口核心意义是一个协议,一个规定了一组功能的协议。既然有协议的意思,那么协议中将要说明需要遵守的条约,相当于抽象方法。然而协议中一般不去理会到底如何实现条约方式,这进一步说明了使用抽象方法的意义。

Java 不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。

接口的定义

[public] interface 接口名 [extends 接口1,接口2…] {

  [public]  [static]  [final] 数据类型 常量名=常量值;
  [public]  [static]  [abstract] 返回值 抽象方法名(参数列表);

}

由接口的声明的语法格式看出,接口是由常量和抽象方法组成的特殊类。

注解:

  • 接口的访问修饰符只有public一个。
  • 接口可以被继承,它将继承父接口中的所有方法和常量。
  • 接口体只包含两部分,一是常量;而是抽象方法。
  • 接口中的常量必须赋值,并且接口中的属性都被默认为是final来修饰的常量。
  • 接口中的所有的方法都必须是抽象方法,抽象方法不需要使用abstract关键字声明,直接默认为是抽象的。

接口的实现和使用

既然接口里只有抽象方法,它只要声明而不用定义处理方式,于是自然可以联想到接口也没有办法像一般类一样,再用它来创建对象。利用接口打造新的类的过程,称之为接口的实现(implementation),同时实现了接口的类称之为接口实现类。接口实现格式如下:

class 类名称 implements 接口A,接口B // 接口的实现
{
…
} 

【实例5-10】接口实现程序设计。

interface A {				// 定义接口A
	    public String name = "张三" ;	// 定义全局常量
	    public void print() ;			// 定义抽象方法
	}
interface B{				// 定义接口B
	   public void say() ;			// 定义抽象方法
}
class C implements A,B {			// 子类同时实现两个接口
	    public void say() {			// 覆写B接口中的抽象方法
		    System.out.println("Hello!");
	    }
		public void print() {			// 覆写A接口中的抽象方法
		    System.out.println("姓名:" + name);
	    }
}

接口的使用与类的使用有些不同。类会直接使用new关键字来构建一个类的实例进行应用,而接口只能被它的实现类进行进一步的实现才能发挥作用。


接口与多态

多态是面向对象编程思想的重要体现,它是建立在继承关系存在基础上的。接口与它的实现类之间存在实现关系,同时也就具有继承关系。因此接口可以像父类子类一样使用多态技术,其中接口回调就是多态技术的体现。接口回调是指:可以将接口实现类的对象赋给该接口声明的接口变量中,那么该接口变量就可以调用接口实现类对象中的方法。不同的类在使用同一接口时,可能具有不同的功能体现,即接口实现类的方法体不必相同,因此,接口回调可能产生不同的行为。

【实例5-11】接口回调的例子。

interface ShowMessage {
	  void showTradeMark();
}
class TV implements ShowMessage {
	  public void showTradeMark() {
		System.out.println("我是电视机");
	  }
}
class PC implements ShowMessage {
	  public void showTradeMark() {
		System.out.println("我是电脑");
	  }
}
public class TestExample {
	  public static void main(String args[]) {
		ShowMessage sm; // 声明接口变量。
		sm = new TV(); // 实现类对象赋值接口变量
		sm.showTradeMark(); // 接口回调。
		sm = new PC(); // 接口变量中存放对象的引用。
		sm.showTradeMark(); // 接口回调。
	  }
}

返回 Java程序设计