`
Sunshyfangtian
  • 浏览: 243507 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

Java接口详解

    博客分类:
  • Java
阅读更多

对初学者来说,接口不是很好理解。现将某高手的一篇文章贴出来,共大家分享!

我们来看一个类

class A {

private int a;

public int getA() {

return a;

}

}

这个类的属性是私有的,外界不能访问,而外界可以通过公有方法来访问这个类。我们说一个类的公有方法就是这个类的对外接口。通常一个类的属性都是私有的,方法大多是公有的。外界只能过个这些公有方法来访问类。这也是Java封装性的体现。如果一个类没有公有属性, 也没有公有方法,这个类就是无法使用的类了。所以我们需要为一个类提供对外接口。

 

一个类中的方法,不只是说明了它要“做什么”,而且方法的内容也说明了“怎么做”。打个不太恰当的例子,一个杀人方法。从名字上看,你知道了“做什么”,但没有办法看到“怎么做”。而方法的内容说明了“怎么做”。

class killer {

private String name;

private int age;

private String phone;

private String addr;

......

public void kill(Person p) {

Qiang qiang = new Qiang("ak47");

qiang.fire(p);

}

}

这个类的kill方法内容说明了杀人的过程。如果你不想用这种方式杀人。因为你很BT,你想用毒药杀人。那么这个类的内容就需要改。但是,还有很多其它的“客户”,需要用不同的方式杀人。怎么办呢?一个很好的办法就是,我们只定义“做什么”,而不定义“怎么做”。

interface Killer {

public void kill(Person p);

}

接口说明了“做什么”,而实现这个接口的类,也就是实现类需要说明“怎么做”。

class Killer1 implements Killer {

public void kill(Person p) {

Qiang qiang = new Qiang("ak47");

qiang.fire(p);

}

}

class Killer2 implements Killer {

public void kill(Person p) {

Bane bane = new Bane();

p.eat(bane);

}

}

public class Test {

public static void main(String[] args) {

Killer jingKe = new Killer1();

Person yingZheng = new Person();

jingKe.kill(yingZheng);

}

}

接口可以把“做什么”和“怎么做”分离开来。这给Java带来了很多好处。虽然代码量增加了,可我们的程序的可维护性加强了。我们的程序是可以拆分的。就象电脑一样,可以拆分成很多组件。我一直在想,如果我的MP3耳机可以拆分就好了,那样在耳机只坏掉一个的时候就不用重新买一个了。

 

不过上面的例子看不到什么太大的好处。你可能会说,如果你的目的是为了不修改代码,那么,如果我想使用Killer2来完成任务,还是需要修改main方法为:Killer jingKe = new Killer2();。没有错,不过你可以通过一个工厂来完成上面的任务。也就是说,不通过new语句来获得Killer对象,而是通过工厂来获得Killer对象。

public class KillerFactory {

public static killer getKiller() {

return new Killer1();

}

public static Killer getKiller(String path) throws Exception {

Properties prop = new Properties();

prop.load(new FileInputStream(path));

String className = prop.getProperty("killer");

Class clazz = Class.forName(className);

return (Killer)clazz.newInstance();

}

}

代码确实增加了很多,可是这对后期的系统维修和系统升级带来了很多好处。

水龙头与出水管的关系,我们需要把水龙头安装到出水管上。如果有一天我们需要更换水龙头时,只需要把老的水龙头拆卸下来,把新的水龙头安装到出水管上即可。如果水龙头与出水管是一体的,就是无法拆卸的怎么办呢?或是说出水管只能安装水龙头,而不能安装淋浴器,这就使我们生活很不方便。我们可以理解为出水管的连接方法,连接的对象是“出水设备”,而这个“出水设备”是一个接口。而水龙头与淋 浴器都是这个接口的实现类。但是接口在哪里呢?它长什么样子?我们没看到。它是一个标准,连接处的内径与外径。螺丝抠的密度等。这就和你的电脑上为什么可以连接USB设备一样。如果电脑和某一个USB

备电焊到一起,那么其它的USB设备就无法使用了。电脑使用的是实现了USB接口的电子设备,而我们的U盘、MP3、移动硬盘及鼠标都是USB接口的实现类。

 

Java写出来的程序也和我们现实生活中的设备一样。如电脑,我们希望电脑的所有部件都可以更换,如果主板上的内存插槽与内存条不附。我们说,内存条没有实现某某接口。Java是完全面向对象的,而面向对象是我们最为熟悉的东东。面向对象并不简单,而是我们太熟悉它了。所以我们学习Java会很方便。在现实社会中,所有的标准到了Java中都是接口。一盒香烟多少支烟,烟的长度等都是标准。一个光盘的大 小。Java中的JDBC就是一个标准,而各大数据库厂商及第三方厂商实现了这一标准。JDBC只说明了目的,没有说明怎么完成的目的。

 

面向对象就在我们眼前,不过我们有时不太注意它。希望你在今后学习Java时,多与现实社会联系。这样可以有利与你的理解。代码量加大了,但对后期的维护与升级提供了方便。软件公司卖给客户的是class文件,而不是java文件。如果你的客户需要更换Killer对象,只需修改资源文件既可。

 

下面我们来看一个定时器类。现在什么都是自动化的,如空调、电视、洗衣机等等。都要用到定时器这个类。那我们可不可以只写一个定时器类,应用到所有的需要定时器的设备上呢?答案是肯定的,我们需要这个类。

 

好了,我们来分析一下定时器需要完成什么工作吧。定时器应该有启动、停止方法。定时器启动之后,每过一定时间就执行某个动作。其中时间间隔为long型,而要执行的动作可能是输出一个字符串,也可能是打印作业。具体要干什么由使用定时器的用户来完成。而定义定时器时,根本就不知道要干什么。

public class Timmer {

private long time;

private Action action;

public Timmer() {}

public Timmer(long time, Action action) {

this.time = time;

this.action = action;

}

public void start() {

state = START;

if(th == null) {

th = new Thread() {

public void run() {

while(state == START) {

try {

Thread.sleep(time);

action.action();

} catch(Exception e) {

}

}

}

};

}

th.start();

}

public void stop() {

state = STOP;

}

public void setTime(long time) {

this.time = time;

}

public void setAction(Action action) {

this.action = action;

}

public long getTime() {

return (this.time);

}

public Action getAction() {

return (this.action);

}

}

Action是一个接口,它只有一个方法,就是要完成的任务。我们在定时器启动时调用这个接口的方法。而这个Action接口的对象,代表一个动作,这个动作就是用户要完成的动作。

public interface Action {

public void action();

}

public static void main(String[] args) {

Timer t = new Timer(2000, new Action() {

public void action() {

System.out.println("Hello World!");

}

});

t.start();

javax.swing.JOptionPane.showMessageDialog(null, "点击确定按钮停止定时器");

t.stop();

System.exit(0);

}

这是一个典型的回调方法例子。在AWT中,java使用了大量的监听器。这些监听器都是回调方法。在XML解析器SAX中,也使用了回调方法来解析XML文档。

 

接口要比抽象类还要抽象。抽象类需要子类继承,而Java是单继承,所以抽象类被限制了。而接口不同,一个类可以实现多个接口。好比人类与程序员类之间的关系。可以说程序员是人类的子类,如果程序员是一个接口。用人类的子类来实现它就会更好。这个子类还可以去实现会计接口、音乐家接口等等。

 

struts2.0springhibernate等框架中,都大量使用接口。我们关心的是某个接口与另一个接口之间的关系。而不关心某个实现类与另一个接口实现类的关系。在客观世界中,我们交谈时都大量使用接口,只是我们没有注意罢了。如:我公司需要一个程序员(一个实现了程序员接口的对象)。上课时,讲师有一台计算机,用白板笔在白板上写字(计算机是接口,白板及白板笔也是接口)。讲师希望学生能学会所有的知识(讲师及学生都是接口)

 

 

 

 

分享到:
评论

相关推荐

    详解java接口interface

    Java 接口详解 Java 接口是 Java 语言中的一种特殊的抽象类,它定义了一组抽象方法和默认方法,用于规范多个类之间的公共行为。在本文中,我们将详细介绍 Java 接口的定义、抽象方法、默认方法、实现类和使用方法。...

    面向对象的java接口详解

    2. **Java接口的定义**:接口使用`interface`关键字定义,可以包含抽象方法(无方法体的方法)和常量。例如: ```java public interface IShape { double area = 100.0; void draw(); double getArea(); } ``...

    Java接口.docx

    Java 接口详解 Java 接口是一种抽象类型,用于定义一组方法的规范和约束形式,它的主要作用是提高程序的复用性、可维护性和可扩展性。下面我们将详细讨论 Java 接口的定义、实现和使用。 一、定义 Java 接口 定义...

    Java 接口.pdf Java面向对象设计 - Java接口 什么是接口? Java中的接口定义了一个引用类型来创建抽象概念

    ### Java接口详解 #### 1. 什么是Java接口? 在Java中,接口是一种特殊的抽象类,它用于定义一组行为规范。这些规范通过方法签名来表示,而这些方法的具体实现则由实现该接口的类来完成。接口的主要目的是提高程序...

    电信smgp协议java接口

    【电信SMGP协议Java接口详解】 SMGP(Short Message Gateway Protocol)协议,即短消息网关协议,是中国电信用于短信业务的一种通信协议。这个协议主要用于移动运营商与SP(Service Provider)之间的数据传输,支持...

    arcobjects sdk for java,arcgis二次开发官方示例代码和文档

    《ArcGIS二次开发:Java版ArcObjects SDK与官方示例详解》 ArcGIS是一个强大的地理信息系统(Geographic Information System),广泛应用于地图制作、空间分析、地理数据管理等多个领域。为了帮助开发者利用Java...

    最新Java 编程详解

    Java编程详解是一个深入探讨Java语言及其应用的领域,特别是针对最新的Java版本。在这个最新的Java编程详解中,我们可能涵盖了许多现代Java开发的关键知识点,包括但不限于以下几个方面: 1. **Java语言基础**:从...

    Matlab与java接口(图文并茂)

    《Matlab与Java接口技术详解》 Matlab与Java接口技术是实现两者间高效交互的重要途径,它允许我们在Matlab环境中利用Java的强大功能,同时也能让Java程序调用Matlab的功能,实现数据处理和计算任务的无缝对接。本文...

    Java函数式接口详解

    Java函数式接口详解

    Java开发详解.zip

    031707_【第17章:Java数据库编程】_PreparedStatement接口笔记.pdf 031708_【第17章:Java数据库编程】_处理大数据对象(1)—处理CLOB数据笔记.pdf 031709_【第17章:Java数据库编程】_处理大数据对象(2)—处理...

    java的API接口文档模板

    Java API接口文档模板详解 Java API接口文档模板是Java初学者必须掌握的重要知识点之一。该文档模板提供了详细的接口输入输出定义,旨在帮助前后端开发人员快速了解和使用接口。下面我们将对该文档模板进行详细解释...

    Java案例详解1精通Java项目开发

    在本Java案例详解1精通Java项目开发中,我们将深入探讨如何使用Java技术构建高效、稳定的企业信息系统。这个案例主要基于Java编程语言,并结合SQL2000数据库管理系统,利用MyEclipse开发工具来实现。以下将详细介绍...

    java集合详解.pdf

    Java 集合详解 Java 集合框架是 Java 语言中最重要的一部分,掌握集合框架可以让开发者更好地进行 Java 编程。下面将详细介绍 Java 集合框架的实现原理和使用方法。 1.1 集合框架概述 Java 集合框架是 Java 语言...

    Java线程详解大全

    Java提供了两种线程实现方式:继承`Thread`类或实现`Runnable`接口。继承`Thread`类时,需要重写`run()`方法,并直接创建`Thread`对象启动线程。而实现`Runnable`接口则需要创建一个实现该接口的类,然后在创建`...

    详解java接口、继承和多态

    ### 详解Java接口、继承和多态 #### 一、Java接口 在Java中,接口是一种定义行为的方式,它提供了一种实现抽象方法的手段。通过接口,开发人员可以为类定义一组方法签名,但不提供这些方法的具体实现。这有助于...

    java编程详解.pdf

    根据提供的信息,《java编程详解》是一本被广泛推荐并深受读者喜爱的专业书籍,它旨在为初学者和进阶学习者提供全面、深入的Java编程知识。以下是对该书可能涵盖的一些核心知识点的概述: ### Java语言基础 1. **...

    java类库详解(PDF版)

    Java类库是Java编程语言的核心组成部分,它提供了一系列预先定义的类和接口,开发者可以使用这些类和接口来实现各种功能,从而简化编程工作。...这份"java类库详解(PDF版)"文档将是你深入理解Java类库的重要参考资料。

    java对象与接口详解

    Java 中的对象和接口是面向对象编程的重要概念,对于初学者来说,理解这两个概念至关重要。本篇将详细解释这两个概念以及它们在实际编程中的应用。 首先,我们来看一下对象。在 Java 中,对象是类的实例,它是程序...

Global site tag (gtag.js) - Google Analytics