接口是否可以实例化?

在asp.net的工厂模式中
会有如下的语句
比如一个接口IContent
IContent i=DALFactory.content.create();
看似返回的是一个sqlserverdal中的content对象,但是复制给了一个接口
貌似接口实例化了,其实不然
找了一下午找到java的解释
一样的吧:
一个论坛中发现的,记下了

那并不是创造接口的实例,接口是不能直接实例化的,就像你说的,得经过实现后才行。
而你列举的java.util.Enumeration arg_names = request.getParameterNames();这个并不是直接实例化,request.getParameterNames();返回的是Enumeration接口被实现后的对象,那是一个向上塑形的过程。可以这么看,实现接口的类可以看作是该接口的子类(这是java实现多重继承的解决方法)。所以那么写是合法的。好比有父类A,B是其子类,那么我们就可以这么写 A a=new B();这里的A就相当于Enumeration ,而new B()就相当于request.getParameterNames();返回的对象。你可以参看下面这个例子:

interface Face{
  String prt();
}

class FaceImpl implements Face{
  public String prt(){
    return "implements Face";
  }
}

class Middle{
  public static Face getFace(){
    return new FaceImpl();
  }

class Last{
  public Last(){
    //下面这句就相当于你的 java.util.Enumeration arg_names = request.getParameterNames();
    Face f = Middle.getFace();
    f.prt();
  }
}

转载于:https://www.cnblogs.com/daiye/archive/2009/08/07/1541412.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值