当前位置:  技术问答>java相关

苦思:自定义接口的应用问题。

    来源: 互联网  发布时间:2015-10-30

    本文导语:  Interface AcceptMsg{public void acceptMsg(String info); } public class Login extends JFrame implements AcceptMsg 中实现了acceptMsg()方法 在其他类中看到这样的运用: AcceptMsg container=(AcceptMsg)msgList.get(acceptId);   //msgList is a hashTable,...

Interface AcceptMsg{public void acceptMsg(String info); }
public class Login extends JFrame implements AcceptMsg 中实现了acceptMsg()方法


在其他类中看到这样的运用:
AcceptMsg container=(AcceptMsg)msgList.get(acceptId);  
//msgList is a hashTable, 通过get()取到String
container.acceptMsg(rowMsg) ;

我很奇怪这样的应用,好像把一个String转成接口直接调用。接口在应用时候不是必须用类来实现。例如Map m = new HashTable();
问题是这个程序可以运行。
------------------------------------
但是我自己试验定义接口
public interface IupdateFrame {
  public void dataModelUpdate(String msg);
}
实现用
public class Frame1 extends JFrame implements IupdateFrame {
。。。。。
public void dataModelUpdate(String msg) {
    String msg1 = new String(msg);
    if(msg1.startsWith("1"))
      System.out.println("111111111111111")
}
。。。
}
应用和上面的类似不通过编译。
    IupdateFrame upf = (IupdateFrame) "111";
    upf.dataModelUpdate("1aaaaaaaaaaa");
    upf.dataModelUpdate("2bbbbbbbbbbb");
    upf.dataModelUpdate("3dddddddddddd");

用下面的才可以成功。
    Frame1 f = new Frame1();
    f.dataModelUpdate("1aaaaaaaaaaaaaaaaa");

|
问题的关键就在于这句话:
AcceptMsg container=(AcceptMsg)msgList.get(acceptId);  
 
而你的应用是
IupdateFrame upf = (IupdateFrame) "111";
由于interface can't have constructors 所以,你的用法是不能通过编译得。
而samplet中AcceptMsg container=(AcceptMsg)msgList.get(acceptId);  
相信是直接把
msgList.get(acceptId);  返回的塑造成一个AcceptMsg 的对象了。
其中蕴含了很多技巧。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • <font color=red>苦思不得其解的问题</font>
  • 苦思不得其解,谁能帮帮我,100分求解
  • redhat5.3 能ping通,但网络服务间歇中断,苦思3天尚未解决


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3