AInterface 是一个接口,他里面只定义一些方法,不去定义方法里面的具体实现。
public interface AInterface 
{
public viod A(){}
}
class A 是对接口的扩充。里面把在接口里定义的方法实例话
class A implements AInterface 
{
public viod A(){
    System.out.print("test ok");
}
}AInterface aaa = new A();就是调用这方法。

解决方案 »

  1.   

    大哥 这个我知道 但是 为什么要这样调用呢? 我为什么不可以 用 A aaa = new A() ; 
     
    来实现呢? 这样不行吗?为什么不行?
    行吗?
      

  2.   

    也可以A aaa = new A();
      

  3.   

    AInterface aaa = new A(); 这样写 上升到语法的角度 如何解释呢?谢谢
      

  4.   

    java面相对象强的地方,理解为A类是AInterface.是个is a关系,这样写很灵活..
      

  5.   

    kofwr(搭补流二)  你不解释 我到还明白 
    是不是说 如果平时用的话 A aaa = new A(); 是可以的 但是在Rmi 这种远程调用的问题上 就的AInterface aaa = new A();  这么写呀?可是现在却胡度了
    **********************
    A类是AInterface 这句话不理解 
      

  6.   

    声明一下 我在开头给的Sample 是一个Rmi 程序简化后再简化 的例子!希望各位高人 从RMI的角度帮我解释一下 谢谢
      

  7.   

    都可以,就是说 DoWithJava(你是江湖我大哥) 你是一个具体的"人",
    也就是 is a 关系
    我不叫名字,而直接用"你"代表 DoWithJava(你是江湖我大哥) ,当然我还可以用 DoWithJava(你是江湖我大哥) 来指你."人"就是一个接口,类似于:AInterface 
    " DoWithJava(你是江湖我大哥)"就是一个实例,类似于:A
    无论什么时候用"DoWithJava(你是江湖我大哥)"代表你"DoWithJava(你是江湖我大哥)"是不会都是不会错的.也就是任何时候用
    A aaa = new A();
    都可以.任何时候都说"DoWithJava(你是江湖我大哥)" is a "人"也可以.
    也就是
    AInterface aaa = new A(); 
    也行.
      

  8.   

    将远程类的功能定义为Java接口。
    在Java中,远程对象是实现远程接口的类的实例。在远程接口中声明每个要远程调用的方法。远程接口具有如下特点:1) 远程接口必须声明为public。如果不这样,则除非客户端与远程接口在同一个包内,否则当试图装入实现该远程接口的远程对象时会得到错误结果。2) 远程对象扩展java.rmi.Remote接口。3) 除了所有应用程序特定的例外之外,每个方法还必须抛出java.rmi.RemoteException例外。4) 任何作为参数或返回值传送的远程对象的数据类型必须声明为远程接口类型,而不是实现类。
    -----------------------------------------------这就是为什么要public interface AInterface 了,如果用 A aaa = new A(); 的话,远程调用时就会出问题了楼主明白了吗???????
      

  9.   

    xiaofenguser(风雨)  能不能用简单的一句话 描述AInterface aaa = new A(); 
    这种写法呢? (比如int a = 0 描述位:定义一个int型的变量 a 并负值位0)谢谢
      

  10.   

    问题提的好,这是体现了OO的基本原则,可以看一下java 与模式的前几章。
      

  11.   

    hoxisoft(一切全为你)  你讲的正是我非常关心的一个问题。也是我困惑的一个地方我知道你所说的4点 也知道RMI中接口的重要性 但是 为什么
    AInterface aaa = new A(); 
    的作用是
    A aaa = new A();  
    所无法替代的呢?甚至 
    AInterface aaa = new A(); 是必须的呢?
      

  12.   

    qxjavajava(射手座 =--->听歌看海)  说的正是我想问的 谢谢:)
      

  13.   

    我不是高手,但我想说: 为什么不用 A aaa = new A(); 来代替AInterface aaa = new A(); 
     是因为这样的。  A类 本身是一个AInterface接口的实现类,而AInterface aaa=new A()所返回的是一个接口对象,而A aaa=new A()所返回的是一个A类对象,要想调用接口所定义的方法。那只能用接口对象了。
      

  14.   

    应该是吧,下面是rmi的介绍:    为通过网络执行其他机器上的代码,传统的方法不仅难以学习,而且易出错。解决这个问题的最佳方法是:某些对象正好位于另一台机器,我们可以发送一条消息,并获得返回结果,就像位于自己的本机器一样。Java远程方法调用(RMI)特性使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。下面介绍一下必要的步骤,创建自己的RMI对象。一、远程接口概念:
         RMI对接口有着强烈的依赖。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节。所以客户得到远程对象的一个句柄正好同一些本地的根代码连接,有后者负责通过网络通信。但我们并不关心这些事情,通过自己的接口句柄发送消息即可。我理解是:
    真正的操作还是在远程机器上,即AInterface aaa 指向的是rmi中的远程服务器上的地址,当对aaa进行操作时,发消息给远程服务器,服务器处理再返回结果给客户机的aaa,而在客户机器上根本就没有A这个类.也就不可以用A aaa = new A();
    不过,AInterface aaa = new A();也是不可以的,这应该不是rmi中的用法.因为客户机上根本没有A类,无法实现new A();
      

  15.   

    我也说两句,这样做的好处依我看就两个,一是实现了隐蔽性,二是实现了灵活性。
    先说一,接口中没有定义实现的方法,你的所有实现都在实现了接口的具体类中。
    二,我的接口是public,我的具体类是private,这样的话,你每次都只调用我的public接口就可以选择不同的实现,反正就根所有的人具有不同的行为一样。
    :)
      

  16.   

    xiaofenguser(风雨) 说得很有道理
    AInterface aaa = new A();也是不可以的,这应该不是rmi中的用法.因为客户机上根本没有A类,无法实现new A();
     
    确实 与rmi无关 :) 不好意思 其实 这是 本地调用时用到的方法!希望大家能就这种用法 独特之处 给小弟我讲的再明白一些! 相信 把这个问题说明白 大家都有收获!
      

  17.   

    qxjavajava(射手座 =--->听歌看海)
    AInterface aaa = new A(); 
    (我描述为:定义一个 AInterce 型的变量 aaa 并按 类A 的形式分配内存和初始化)AInterface aaa = new A();是向上转型,就象可以用Object aaa = new A(); 一样,任何类都可以向上转型到Object,向上转型在容器里用得最多,比如List,Map里,还有向下转型,当从List,Map里取出放进去的内容时就会用到,比如:
    Map map = new HashMap();
    A aaa = new A();
    map.put("aaa", aaa);// 这里就用到了向上转型
    ....
    A a = (A)map.get("aaa");// 这里是向下转型.
      

  18.   

    多态性当然你可以用A aaa = new A();如果还有一个类继承此接口:class B implements AInterface 
    {
    .........
    }
    那么就可以
    public Use 
    {
    public static void main(String args[])
    {
    AInterface aaa = new A();
                      AInterface bbb = new B();
                     ///可以做如下操作
                       
                     if(aaa  instanceof A)
                       System.out.println("AAAA");
                     if(bbb instanceof B)
                       System.out.println("BBBB");
              
                     /// }}
      

  19.   

    to: bread213(隐客) 
    我的接口是public,我的具体类是private,这样的话,你每次都只调用我的public接口就可以选择不同的实现,反正就根所有的人具有不同的行为一样
    ================================================
    具体类的作用范围不可能小于接口,上述情况编译会报错.