免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 11989 | 回复: 45

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

论坛徽章:
0
发表于 2005-09-05 16:49 |显示全部楼层
java中的类类似于c中的指针唯一的区别是你不能像c中那样去操作它,new运算符在运行期间为对象分配内存,因此运行一次new,就分配一块内存区域。假如有两个类A和B,
public class A {

method1();{}
method2();{}
method3();{}
method4();{}
}
类B只使用method1()则

public class B {

A a=new A();
a.method1();
}
因此运行一次new,就开辟了一块内存区域(即使不使用method2() method3() method4()也开辟与之对应的内存区域),所以存在耦合

如果有了接口就不这样了,可以根据接口灵活调用类中的方法,降低了耦合。
我觉得这才是java中的接口产生的最根本的原因和最根本的作用

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

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

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

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

论坛徽章:
0
发表于 2005-09-06 17:13 |显示全部楼层

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

public interface callback {
       public void method1();
}
public class A {

method1();{}
method2();{}
method3();{}
method4();{}
}
public class B {

callback a=new A();
a.method1();
}
如果不使用接口B要调用A的方法, 会将A当作参数传给B,然后B再调用A的方法method1(),如果使用接口,则B在调用A的方法时候直接调用method1()方法即可。
(如果我的理解不正确,求求大哥版主了,给我一个接口可以降低耦合的实例好吗)

论坛徽章:
0
发表于 2005-09-06 23:44 |显示全部楼层

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

public class A {

应该是

public class A implements callback {

才对。这样你才能做 callback a = new A();

接口是面向对象编程的很重要的概念之一,它定义了调用与被调用方的 Contract。你可以完全替换掉一个接口的实现,而你只需在调用方改动一个语句。比如,你现在又有一个类实现 callback 这个接口:

class C implements callback {
method1() {
// an entirely different implementation
}
}

在 class B 里面,你只需把

callback a=new A();

替换成

callback a = new C();

后面的语句不用改,那么整个 callback 的实现就变成 class C 的实现了。

论坛徽章:
0
发表于 2005-09-07 00:36 |显示全部楼层

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

不好意思粘贴错了应该是
public interface callback {
      public void method1();
}
public class A implements callback   {

method1();{}
method2();{}
method3();{}
method4();{}
}
public class B {

callback a=new A();
a.method1();
}

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

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

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

论坛徽章:
0
发表于 2005-09-07 11:22 |显示全部楼层

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

public class A {

method1();{}
method2();{}
method3();{}
method4();{}
}

class C  {
method1() {
// an entirely different implementation
}
}


public class B  {

A a=new A();
a.method1();

}

把A a=new A() 改为C a=new C()不就行了吗
怎么体现降低耦合度呢
callback a=new A() 和 A a=new A()
是不是后者直接把类当参数传递前者可以直接调用方法

论坛徽章:
0
发表于 2005-09-07 11:31 |显示全部楼层

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

因为你用A a=new A()的时候,还是知道A是一个具体的实现,所以你没法解耦,解决方法有很多。作为参数传入是一种,利用factory模式创建也可以,现在时髦的IOC也是一种方式。

论坛徽章:
0
发表于 2005-09-07 13:44 |显示全部楼层

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

楼上朋友 我的意思是说A a=new A() 改为C a=new C()是不是降低了耦合?

论坛徽章:
0
发表于 2005-09-07 14:13 |显示全部楼层

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

当然不是,你这种情况就是强耦合,也就是我们要避免地情况
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP