问一下,关于
Applet类中的getAppletContext()这个静态方法的一个代码.我们用getAppletContext()方法得到的是AppletContext接口的对象..AppletContext接口里有个
showDocument()方法,我就纳闷了,在Applet里面可以直接这样写:
getAppletContext().showDocument(new URL("http://www.baidu.com"),"_parent");为什么呢?接口的方法可以直接调用吗?不是,那么是什么类实现了这个接口呢??getAppletContext()方法返回的AppletContext类型,是哪个类实现的呢??

解决方案 »

  1.   

    补充一下.就在java API帮助文档里面没有实现此接口的类
      

  2.   

    "高手也不一定知道的问题"晕,这也叫高手也不一定知道的问题,难怪没人回答.
    补习下java基础,另外标题要写的低调些,高手一般不喜欢回答简单问题.
      

  3.   

    getAppletContext 阅读下这个源码就知道了
      

  4.   

    呵呵,这个问题我觉得,是很难,大家可以看下java的源代码,,,,这可能是根据DIP原则..但是具体怎么实现,还是不清楚,至于标题取得这么嚣张是因为,我想快点解决这个问题,希望高手帮忙,并没有"讽刺"的意思,,,希望大家谅解
      

  5.   

    AppletContext这是个接口    transient private AppletStub stub;//另你困惑的对象在这个对象里面
        public AppletContext getAppletContext() {
    return stub.getAppletContext();
        }
        //stub在某个时刻被注入了,我本人不熟悉Applet不了解是什么时刻,根据猜想这个注入的工作就是applet的特有的
        public final void setStub(AppletStub stub) {
    this.stub = (AppletStub)stub;
        }
    从这段注释上分析,我想这个对象就是applet特殊之处,他不允许序列化,应该是在页面加载的时候被注入的,你可以去翻阅底层源码jni部分,我不是做研究但感觉你是
        /**
         * Applets can be serialized but the following conventions MUST be followed:
         *
         * Before Serialization:
         * An applet must be in STOPPED state.
         *
         * After Deserialization:
         * The applet will be restored in STOPPED state (and most clients will
         * likely move it into RUNNING state).
         * The stub field will be restored by the reader.
         */
        transient private AppletStub stub;
      

  6.   

    同意2楼跟applet没啥关系
    List getList(){return new ArrayList();}getList().someListMethod();//List是接口,能直接调用接口方法吗?
      

  7.   

    具体的实现是在getAppletContext()方法中, 发布的JDK中并没有对这个接口的直接实现类, 这是开发JDK
    内部用到的实现类                  
      

  8.   

    楼主好眼熟啊,6楼正解,AppletContext接口由stub.getAppletContext()实现的而stub的类型是AppletStub接口.AppletStub接口似乎是在浏览器环境或applet viewer环境里实现的.