Java 接口技术理解

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

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

java.lang 
类 String

java.lang.Object
  java.lang.String
所有已实现的接口:
SerializableCharSequenceComparableString>

 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

局限

单继承局限

无局限


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值