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();就是调用这方法。
public interface AInterface
{
public viod A(){}
}
class A 是对接口的扩充。里面把在接口里定义的方法实例话
class A implements AInterface
{
public viod A(){
System.out.print("test ok");
}
}AInterface aaa = new A();就是调用这方法。
来实现呢? 这样不行吗?为什么不行?
行吗?
是不是说 如果平时用的话 A aaa = new A(); 是可以的 但是在Rmi 这种远程调用的问题上 就的AInterface aaa = new A(); 这么写呀?可是现在却胡度了
**********************
A类是AInterface 这句话不理解
也就是 is a 关系
我不叫名字,而直接用"你"代表 DoWithJava(你是江湖我大哥) ,当然我还可以用 DoWithJava(你是江湖我大哥) 来指你."人"就是一个接口,类似于:AInterface
" DoWithJava(你是江湖我大哥)"就是一个实例,类似于:A
无论什么时候用"DoWithJava(你是江湖我大哥)"代表你"DoWithJava(你是江湖我大哥)"是不会都是不会错的.也就是任何时候用
A aaa = new A();
都可以.任何时候都说"DoWithJava(你是江湖我大哥)" is a "人"也可以.
也就是
AInterface aaa = new A();
也行.
在Java中,远程对象是实现远程接口的类的实例。在远程接口中声明每个要远程调用的方法。远程接口具有如下特点:1) 远程接口必须声明为public。如果不这样,则除非客户端与远程接口在同一个包内,否则当试图装入实现该远程接口的远程对象时会得到错误结果。2) 远程对象扩展java.rmi.Remote接口。3) 除了所有应用程序特定的例外之外,每个方法还必须抛出java.rmi.RemoteException例外。4) 任何作为参数或返回值传送的远程对象的数据类型必须声明为远程接口类型,而不是实现类。
-----------------------------------------------这就是为什么要public interface AInterface 了,如果用 A aaa = new A(); 的话,远程调用时就会出问题了楼主明白了吗???????
这种写法呢? (比如int a = 0 描述位:定义一个int型的变量 a 并负值位0)谢谢
AInterface aaa = new A();
的作用是
A aaa = new A();
所无法替代的呢?甚至
AInterface aaa = new A(); 是必须的呢?
是因为这样的。 A类 本身是一个AInterface接口的实现类,而AInterface aaa=new A()所返回的是一个接口对象,而A aaa=new A()所返回的是一个A类对象,要想调用接口所定义的方法。那只能用接口对象了。
RMI对接口有着强烈的依赖。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节。所以客户得到远程对象的一个句柄正好同一些本地的根代码连接,有后者负责通过网络通信。但我们并不关心这些事情,通过自己的接口句柄发送消息即可。我理解是:
真正的操作还是在远程机器上,即AInterface aaa 指向的是rmi中的远程服务器上的地址,当对aaa进行操作时,发消息给远程服务器,服务器处理再返回结果给客户机的aaa,而在客户机器上根本就没有A这个类.也就不可以用A aaa = new A();
不过,AInterface aaa = new A();也是不可以的,这应该不是rmi中的用法.因为客户机上根本没有A类,无法实现new A();
先说一,接口中没有定义实现的方法,你的所有实现都在实现了接口的具体类中。
二,我的接口是public,我的具体类是private,这样的话,你每次都只调用我的public接口就可以选择不同的实现,反正就根所有的人具有不同的行为一样。
:)
AInterface aaa = new A();也是不可以的,这应该不是rmi中的用法.因为客户机上根本没有A类,无法实现new A();
确实 与rmi无关 :) 不好意思 其实 这是 本地调用时用到的方法!希望大家能就这种用法 独特之处 给小弟我讲的再明白一些! 相信 把这个问题说明白 大家都有收获!
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");// 这里是向下转型.
{
.........
}
那么就可以
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");
/// }}
我的接口是public,我的具体类是private,这样的话,你每次都只调用我的public接口就可以选择不同的实现,反正就根所有的人具有不同的行为一样
================================================
具体类的作用范围不可能小于接口,上述情况编译会报错.