接口的实现类对象创建!?看这个怎么回事
java吧
全部回复
仅看楼主
level 11
JAVA羊 楼主
有一个接口A,它有一个实现类B。
有一个工厂类Factory,里面有一个方法 get(){return new B;}
以前创建B的对象都是 A b = new Factory.get();
今天见到一个 A b =
(A)(new Factory.get());怎么解释/理解?
2012年11月28日 08点11分 1
level 11
JAVA羊 楼主
[囧]
2012年11月28日 08点11分 2
回复 newbiezhang :但是我要的东西在李元芳那儿,也就是我的方法定义在B中,出来她妹妹怎么使用需要的方法呢?
2012年11月28日 09点11分
回复 newbiezhang :问题的关键来了,A实现了B的方法了吗?A是接口啊!
2012年11月28日 09点11分
level 2
强制或转换成A类型
2012年11月28日 08点11分 3
level 16
不是一般都静态的么……这么会这样设计
2012年11月28日 08点11分 4
也是有这个设计的, 工厂根据参数告知的类型创建一个对象,因为接收的类型是动态的,所以创建出来的对象也是动态的类型,所以返回来的是一个Object对象,需要自己强转。
2012年11月28日 08点11分
Eclipse IAdapterFactory 就是这么干的。
2012年11月28日 08点11分
public Object getAdapter(Object adaptableObject, Class adapterType);
2012年11月28日 08点11分
回复 cnfree2000 :[大惊],这样啊……
2012年11月28日 08点11分
吧务
level 15
B也是A啊,不过你只能调用A中有的方法,B特有的方法无法调用除非再强转成B。。。
不过既然是用接口,那就是说接口中的方法够用了。。。
2012年11月28日 09点11分 5
是不是只能调用B中实现的A中的方法,不能调用B中另外的方法?如果是这样,我的疑问就完全没有了
2012年11月28日 12点11分
回复 JAVA羊 :是的,因为引用是A类型。引用是啥类型,就只能调用该型和它的父类的方法。。。
2012年11月28日 12点11分
level 12
如果A接口方法够用,就用A。就好像父亲有100元,你可以用,你自己赚外快50元也可以花。强转后只能用A的100元,不能用B的50元。
2012年11月28日 11点11分 7
明白了,谢谢
2012年11月28日 12点11分
level 14
楼上说的对啊
2012年11月28日 12点11分 8
1