免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12024 | 回复: 15
打印 上一主题 下一主题

关于java中接口的认识(不知理解的是否正确) [复制链接]

论坛徽章:
0
1 [报告]
发表于 2005-09-06 07:34 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

即使有了interface,也还是实例化同样的对象,并没有减少内存的使用

另外method()占用的内存和new没有关系,无论是c还是java都不会在每次new的时候都给某个方法或是函数分配空间的,那不是太浪费了么?

论坛徽章:
0
2 [报告]
发表于 2005-09-07 07:34 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

dennis2讲的是对的,这样其实就是在降低耦合度

论坛徽章:
0
3 [报告]
发表于 2005-09-07 16:35 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

楼主的代码上还是没有降低耦合度。
我举个别的例子吧:

  1. import java.util.Iterator;
  2. import java.util.Vector;

  3. //Interface Decouble Example

  4. public class  ChinaUnixJavaCircusShow{

  5.         public static void main(String[] args) {
  6.                 Circus c = new Circus();
  7.                 c.addAnimalActors(new Bear());
  8.                 c.addAnimalActors(new Horse());
  9.                 c.addAnimalActors(new Dog());
  10.                 c.bigShow();
  11.         }
  12. }

  13. interface AnimalActor {
  14.         public void showBestPose();
  15. }

  16. class Bear implements AnimalActor {

  17.         public void showBestPose() {
  18.                 System.out.println("This bear show!!");
  19.         }
  20. }

  21. class Horse implements AnimalActor {

  22.         public void showBestPose() {
  23.                 System.out.println("This horse show!!");
  24.         }
  25. }

  26. class Dog implements AnimalActor {

  27.         public void showBestPose() {
  28.                 System.out.println("This dog show!!");
  29.         }
  30. }

  31. class Circus {
  32.         private Vector actors = new Vector();

  33.         public void addAnimalActors(AnimalActor a) {
  34.                 actors.add(a);
  35.         }

  36.         public void bigShow() {
  37.                 Iterator i = actors.iterator();
  38.                 while (i.hasNext()) {
  39.                         ((AnimalActor) i.next()).showBestPose();
  40.                 }
  41.         }
  42. }
复制代码

由于使用了接口,Circus不再理会参加演出的具体的动物演员的类,只要是实现了AnimalActor接口的类都可以参加Big Show。
如果没有使用接口,那么Circus的代码中就要包含Horse,bear, dog类的引用。现在Circus的代码和具体可能有多少种动物无关,这就是解藕

论坛徽章:
0
4 [报告]
发表于 2005-09-08 08:49 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

传递的当然是对象。

wqkzt类不再关心具体武器的类型。只是对wuqi这个接口进行操作,这就是解耦

论坛徽章:
0
5 [报告]
发表于 2005-09-08 09:10 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

不过楼主的例子还真是弓虽
用拼音做类名……-_-||

论坛徽章:
0
6 [报告]
发表于 2005-09-09 08:40 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

原帖由 "TAxxjszxlkjf" 发表:
e.kaihuo(new A());
e.kaihuo(new B());
e.kaihuo(new C());
wqkzt类这样不也得关心武器的类型吗
(真郁闷就是不明白。)
你是所有类的程序员,所以你看到了所有的细节。假设你只开发了wqkzt类,其他类你没有source code,你看到了什么?能看到具体的武器类型么?

论坛徽章:
0
7 [报告]
发表于 2005-09-09 13:46 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

解耦就是接口存在的本质原因了。楼主觉得还有什么其他的好处呢?

论坛徽章:
0
8 [报告]
发表于 2005-09-09 18:57 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

楼主说的“实质上一样”的意思是什么?
原帖由 "TAxxjszxlkjf" 发表:
类D中
wqkzt e=new wqkzt();
e.kaihuo(new A());

D这段代码里有两个对象
类F中
wuqi a = new A();
a.gongji();
二者实质上不就一样了吗没什么区别了
F这段代码里只有一个对象。

怎么会实质上一样呢?

论坛徽章:
0
9 [报告]
发表于 2005-09-10 16:15 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

倒,原来你还在看这3个类。D,E,F都不能说明接口的作用,虽然看上去好像是使用了接口。真正体现接口好处的是wqkzt类

我再强调一下:
你是所有类的程序员,所以你看到了所有的细节。假设你只开发了wqkzt类,其他类你没有source code,你看到了什么?能看到具体的武器类型么?

论坛徽章:
0
10 [报告]
发表于 2005-09-11 06:51 |显示全部楼层

关于java中接口的认识(不知理解的是否正确)

【1】 只有D使用了wqkzt;E,F没有。
【2】D和E, F相比没有解耦,因为E, F的问题在于E, F这两个类和其他类有强耦合,但是D同样和其他类有耦合。

我说的是如果wqzkt在E, F里有不同的实现:比如下边的实现:
F

  1. class wqzkt {
  2.     public void kaihuo(A a) {
  3.       a.gongji();
  4.     }

  5.     public void kaihuo(B b) {
  6.       b.gongji();
  7.     }

  8.     public void kaihuo(C c) {
  9.       c.gongji();
  10.     }

  11. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP