Java如何向外提供接口

Python022

Java如何向外提供接口,第1张

public static String sendPostUrl(String url, String param, String charset) {

    PrintWriter out = null

    BufferedReader in = null

    String result = ""

    try {

      URL realUrl = new URL(url)

      // 打开和URL之间的连接

      URLConnection conn = realUrl.openConnection()

      // 设置通用的请求属性

      conn.setRequestProperty("accept", "*/*")

      conn.setRequestProperty("connection", "Keep-Alive")

      conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible MSIE 6.0 Windows NT 5.1SV1)")

      // 发送POST请求必须设置如下两行

      conn.setDoOutput(true)

      conn.setDoInput(true)

      // 获取URLConnection对象对应的输出流

      out = new PrintWriter(conn.getOutputStream())

      // 发送请求参数

      out.print(param)

      // flush输出流的缓冲

      out.flush()

      // 定义BufferedReader输入流来读取URL的响应

      in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset))

      String line

      while ((line = in.readLine()) != null) {

        result += line

      }

    } catch (Exception e) {

      System.out.println("发送 POST 请求出现异常!" + e)

      e.printStackTrace()

    }

    // 使用finally块来关闭输出流、输入流

    finally {

      try {

        if (out != null) {

          out.close()

        }

        if (in != null) {

          in.close()

        }

      } catch (IOException ex) {

        ex.printStackTrace()

      }

    }

    return result

  }

java中接口的定义和接口的实现

1.接口的定义

使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:

[修饰符] interface 接口名 [extends 父接口名列表]{

[public] [static] [final] 常量

[public] [abstract] 方法

}

修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。

接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。

extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。

方法:接口中的方法只有定义而没有被实现。

例如,定义一个用于计算的接口,在该接口中定义了一个常量PI和两个方法,具体代码如下:

1 public interface CalInterface

2 {

3     final float PI=3.14159f//定义用于表示圆周率的常量PI

4     float getArea(float r)//定义一个用于计算面积的方法getArea()

5     float getCircumference(float r)//定义一个用于计算周长的方法getCircumference()

6 }

注意:

与Java的类文件一样,接口文件的文件名必须与接口名相同。

2.接口的实现

接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用关键字implements,其基本格式如下:

[修饰符] class <类名>[extends 父类名] [implements 接口列表]{

}

修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。

类名:必选参数,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。

extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。

implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。

在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。例如,编写一个名称为Cire的类,该类实现5.7.1节中定义的接口Calculate,具体代码如下:

1 public class Cire implements CalInterface

2 {

3     public float getArea(float r)

4     {

5         float area=PI*r*r//计算圆面积并赋值给变量area

6         return area//返回计算后的圆面积

7     }

8     public float getCircumference(float r)

9     {

10         float circumference=2*PI*r     //计算圆周长并赋值给变量circumference

11         return circumference          //返回计算后的圆周长

12     }

13     public static void main(String[] args)

14     {

15         Cire c = new Cire()

16         float f = c.getArea(2.0f)

17         System.out.println(Float.toString(f))

18     }

19 }

在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了。下面通过一个具体的实例详细介绍以上问题的解决方法。

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

一.接口含义:

1.Java接口,Java语言中存在的结构,有特定的语法和结构;2.一个类所具有的方法的特征集合,是一种逻辑上的抽象。

前者叫做“Java接口”,后者叫做“接口”。

Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。

Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和final属性。

二.为何用接口Java是一种单继承的语言,若要给已有父类的具体类增加新功能,在OCP原则下,解决是给它的父类加父类,或者给它父类的父类加父类,直到移动到类等级结构的最顶端。这样一来,对一个具体类的可插入性的设计,就变成了对整个等级结构中所有类的修改。

当有了接口,以上例子中,就不需要维护整个等级结构中的所有类了.

三.接口具胡可插入性:

在一个等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类可以从此类自动继承这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法,这时候,这些子类具有了可插入性(并且可以用这个接口类型装载,传递实现了他的所有子类)。

接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。

正是有了接口,使得Java单继承性有了新的扩展的可能(变向地实现多继承)三.类型等级结构Java接口(以及抽象类)一般用来作为一个类型的等级结构的起点。

如果一个类已经有了一个主要的超类型,那么通过实现一个接口,这个类可以拥有另一个次要的超类型,这种次要的超类型叫做混合类型。

四.Java接口分类

1、普通接口(含有方法定义)public interface ActionListener{public abstract void actionPerformed(ActionEvent event)}

2、标识接口(无任何方法和属性定义)标识接口是没有任何方法和属性的接口.标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。

public interface Serializable{}

3、常量接口是指用Java接口来声明一些常量,然后由实现这个接口的类使用这些常量。

public interface AppConstants{public static final DATA_SOURCE_NAME="test"public static final USER_NAME="test"public static final PASSWORD="test"}

五.接口的特点

1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化5、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

6、Java接口必须通过类来实现它的抽象方法

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9、一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

六.Java接口和Java抽象类区别面向对象设计的重点在于抽象。抽象类与接口都位于继承树的上层。

相同点:

1、代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统之间的送耦合

2、都不能被实例化

3、都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不包含方法体不同点:

1、最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以;这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。

可以向抽象类里加入一个新的具体方法,所有的子类都自动得到这个方法;但Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译,必需手动给每个实现了该接口的类加上该方法的实现;

2、抽象类的实现只能由子类给出,也即该实现只能在抽象类定义的继承的等级结构中;所以抽象类作为类型定义工具的效能大打折扣。

Java接口,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

以上看出:Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

3、结合1、2点中抽象类和Java接口的各自优势,具精典的设计模式就出来了:

声明类型的工作仍然由Java接口承担,但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。

在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。

七.使用接口和抽象类的总体原则:

1、用接口作为系统与外界交互的窗口站在外界使用者(另一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统本身的角度,接口制定系统必须实现哪些服务,接口是系统中最高层次的抽象类型.通过接口交互可以提高两个系统之间的送耦合系统A通过系统B进行交互,是指系统A访问系统B时,把引用变量声明为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例。

public interface B   {   }

public class C implements B   {   }

public class A   {  B a = new C()  }

2、Java接口本身必须非常稳定,Java接口一旦制定,就不允许随遇更加,否则对外面使用者及系统本身造成影响3、用抽象类来定制系统中的扩展点,抽象类来完成部分实现,还要一些功能通过它的子类来实现