博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 接口技术理解
阅读量:4095 次
发布时间:2019-05-25

本文共 3510 字,大约阅读时间需要 11 分钟。

如果定义类的时候发现类的内部只有全局常量和抽象方法的话,则这个类可定义为接口。我们可以在JDK文档中看到有大量的类实现了接口,接口的定义在Java程序中使用还是挺常见的。

例如查看String类的文档,可以看到如下定义:

java.lang 
类 String

java.lang.String
所有已实现的接口:
,  ,  <  >

 1、定义相关问题: 

1.接口必须有子类,子类使用implements进行接口实现,一个子类可以同时实现多个接口;

2.接口子类若不是抽象类,则一定要覆写接口之中的全部抽象方法;

3.接口对象可以利用子类向上转型,进行实例化操作;

4.接口多实现的向上转型限制问题:若子类实现多个接口(例如class C implements A,B),当用子类实现父接口的实例化时,父接口A的实例化不能访问父接口B的方法;

5.先继承(extends),后实现(implements);

 

2、几点说明:

1.接口之中的全部方法访问权限都是public,不管写与不写都一样,因为大部分类都是由接口规定的,所以才有了只要是方法大部分使用public定义的原因;

2.在接口中既然全部都是由抽象方法和全局常量所组成,所以在定义的时候以下两种定义方式一样:

public static final String MSG_A = "hello ,interface A !";       public abstract void fun_A() ;        String MSG_A = "hello ,interface A !";       void fun_A() ;

3.一般在定义接口的时候定义方法比较多,定义全局常量比较少;

4.一个抽象类可以使用implements实现接口。但是一个接口却不能继承一个抽象类,可是一个接口可以使用extends继承多个父接口(接口的多继承);

5.任何内部的结构实际上都不受定义的限制,所以在一个接口里面也可以继承定义内部接口或内部抽象类,而且用static定义的内部接口就是一个外部接口。

 

 3、接口功能

在实际中,接口有三大核心功能:

1.使用接口定义规范标准

2.接口表示一种能力(java.lang.Interface Cloneable)

3.将服务器的远程视图暴露给客户端

 

 4、接口的两个应用

(1)接口应用————工厂设计模式

利用工厂类减耦合,在main函数中使用factory类来接收用户传递进来的参数,根据参数判断所需要新生成的类,这样避免了用户直接操作main函数,降低了耦合度。

 

interface fruit {       public void eat() ;} class apple implements fruit {       public void eat() {              System.out.println("吃苹果!") ;       }} class orange implements fruit {       public void eat() {              System.out.println("吃橘子!") ;       }} class factory {       public static fruit getInstance(String str) {              if(str.equals("apple")) {                     return new apple() ;              }              if(str.equals("orange")) {                     return new orange() ;              }              return null ;       }} public class InterfaceDemo {             public static void main(String args[]) {                           fruit f = factory.getInstance(args[0]) ;              f.eat();       }   }

(2)接口应用————代理设计模式(Proxy)

在本结构中,发现一个接口定义了两个子类,一个子类完成核心的真实业务主题,而另一个提供所有的辅助功能

 

interface Network {              //网络连接       public void browse(String url) ;}  class RealNetwork implements Network {       public void browse(String url) {              System.out.println("访问站点:" + url ) ;       }} class ProxyNetwork implements Network {       private Network net ;            //保存真正的上网连接       public ProxyNetwork(Network net) {              this.net= net ;       }       public boolean check(String url) {              if(url.contains("google")) {                     return false ;              }              return true ;       }       public void browse (String url) {              if(this.check(url)) {             //通过检查了,可以上网                     this.net.browse(url);              }              else{                     System.out.println("404 NOT FOUND the PAGE!") ;              }       }       public void record (String url) {              System.out.println("上网记录:" + url) ;       }}  public class InterfaceDemo {             public static void main(String args[]) {                           Networknw = new ProxyNetwork(new RealNetwork()) ;              nw.browse("www.sina.com");              nw.browse("www.google.com");              nw.browse("www.google.sina.com");        }}

程序结果:

访问站点:www.sina.com

404 NOT FOUND the PAGE!

404 NOT FOUND the PAGE!

5.抽象类与接口的区别

抽象类和接口是整个项目最大的组成灵魂。通过对比分析可以发现,在项目中使用抽象类还是接口都一样,可是由于抽象类的单继承局限,如果二者皆可使用时,优先使用接口。

NO

区别

抽象类

接口

1

关键字

abstract 类名称{}

interface 接口名称{}

2

组成

普通方法、构造方法、抽象方法、常量、变量

全局常量、抽象方法

3

权限

各类权限

只能是public

4

使用

extends只能继承一个父类

子类使用implements可以实现多个接口

5

关系

抽象类可以实现多个接口

接口不能继承抽象类,但是可以继承多个接口,实现接口多继承

6

设计模式

模板设计模式

工厂、代理

7

局限

单继承局限

无局限

 

转载地址:http://mntii.baihongyu.com/

你可能感兴趣的文章
DirectX11 计时和动画
查看>>
DirectX11 光照与材质的相互作用
查看>>
DirectX11 法线向量
查看>>
DirectX11 兰伯特余弦定理(Lambert)
查看>>
DirectX11 漫反射光
查看>>
DirectX11 环境光
查看>>
DirectX11 镜面光
查看>>
DirectX11 三种光照组成对比
查看>>
DirectX11 指定材质
查看>>
DirectX11 平行光
查看>>
DirectX11 点光
查看>>
DirectX11 聚光灯
查看>>
DirectX11 HLSL打包(packing)格式和“pad”变量的必要性
查看>>
DirectX11 光照演示示例Demo
查看>>
漫谈一下前端的可视化技术
查看>>
VUe+webpack构建单页router应用(一)
查看>>
Vue+webpack构建单页router应用(二)
查看>>
从头开始讲Node.js——异步与事件驱动
查看>>
Node.js-模块和包
查看>>
Node.js核心模块
查看>>