免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: TAxxjszxlkjf

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

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

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

既然D和E, F相比没有解耦,也就是说只有在都使用wqzkt类这个前提下才能体现接口的本质,那接口存在还有什么意义。(我觉得只有一个使用接口如程序D,和一个不使用接口如程序E相比较才能反映出接口的本质。)因为E F里没必要实现
class wqzkt {
   public void kaihuo(A a) {
     a.gongji();
   }

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

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

}

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

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

原帖由 "TAxxjszxlkjf" 发表:
既然D和E, F相比没有解耦,也就是说只有在都使用wqzkt类这个前提下才能体现接口的本质,那接口存在还有什么意义。(我觉得只有一个使用接口如程序D,和一个不使用接口如程序E相比较才能反映出接口的本质。)因为E F里没必要实现

你说对了,只有使用了接口的程序才能看出接口的好处。但是,不是使用了接口,就一定能享受到接口的好处。比如F,就没有什么好处,因为不是最佳的使用接口的方式。“解耦”意味着“用接口代替类”,而不是接口和类并存,F那个程序充其量只是演示了一下类到接口的类型转换的语法而已,没有任何意义。接口在定义了之后,一定要有一个很好的使用者,比如wqzkt这样的类,才能看出它的用处;对D和F这两个类来说(我不是指D程序和F程序),不是发挥接口优势的类,所以比较D, E, F类是没有意义的。

---------------------------------

至于说E, F里没有必要实现wqzkt类,我只能说这个例子里没有体现wqzkt类存在的必要性。因为这个程序没有需求。只有在复杂的程序里,多人开发的环境中,才能体会到接口的好处。所以在没有需求的情况下,只是单纯的对比D和E是不能看出接口存在的意义的。我是假设wqzkt有存在的意义(抱歉,我无法从这个类的名字看出它的含义),那么最佳的wqzkt类的设计方式是在wqakt类中使用wuqi接口,而不是A, B,C。而你的前提是wqzkt类没有存在的必要,所以只有在有需求的情况下才能看出wuqi接口的作用。

---------------

其实很多软件工程的基本概念开始都不是太容易理解。多写写程序,参与一些实际的项目,然后就会有更清晰的认识。

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

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

我使用类文件F那种例子就是为了和文件D进行单纯的比较,去比较接口产生的本质。因为我觉得使用接口是java编程的一种方式,讨论它产生的本质不应该局限在都使用类似于wqkzt(武器控制台)类的前提下去讨论(使用接口的好处我也知道,特别是面向不同客户的大型程序中,但那只是它产生后人们发现的好处,和他产生的本质没关系,“多写写程序,参与一些实际的项目,然后就会有更清晰的认识”这样只能更好的理解使用接口的好处,更好的去使用它。我现在只想知道接口为什么产生,是为什么产生的,人们为什么要设计接口。(接口产生的本质)如我举的例子,要实现同一个结果,程序D,程序F两种方式,如果二者在编程的本质上没什么区别(如耦合),虽然外形不一样,那用程序F不就可以了吗,还设计接口干什么。

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

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

接口设计的目的就是因为有复杂的大型程序,如果是简单的程序,那么面向对象都没有必要,用汇编就够了,何况“接口”。这就是接口产生的目的。

所有的语法现象,包括接口,包括面向对象,都是因为有需求,所以才出现的。所以如果你明白了接口的好处,自然就知道了接口出现的目的。

你举的例子没有需求分析,同时也比较简单,所以看不出接口的作用。也就是说,从你的例子看来,接口这个东西是没有任何用处的。甚至看不出解耦有什么用,因为程序里没有什么太大的耦合度。

Java没有什么特殊的,接口也不是什么神秘的东西,设计java和接口的人就是为了在设计和开发大型程序的时候,有接口这么个东西比没有要方便,而不是为了某个神秘的“本质”设计接口的。我觉得你把接口产生的原因和结果混淆了。不是接口产生了,人们才发现用来设计大型应用程序用接口好;而是因为大型软件的开发要求了“接口”的出现。其实整个软件工程这门科学都是这样。总不能说是“先有了软件工程,大家才发现软件工程可以用来设计和开发软件”吧、

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

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

劳模,当之无愧

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

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

劳模?俺?

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

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

[quote]原帖由 "sakulagi"]劳模?俺?[/quote 发表:


恩,pf死你了,呵呵,超有耐心~~~~,很称职的说~~~~~~~~~~~

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

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


讨论基本的问题是理清思路,学习概念的最好方法

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

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

程序F E中
..............
class C implements wuqi {

public void gongji() {
System.out.println("Inside C's constructor.";
}
}

class F  {
public static void main(String args[]){
wuqi a = new A();
a.gongji();
wuqi b = new B(); //若改为wuqi a = new B();
b.gongji();        //a.gongji();
wuqi c = new C(); //wuqi a = new C();
c.gongji();       //a.gongji();
}
}


............
class E  {
public static void main(String args[]){
A a = new A();
a.gongji();
B b = new B(); //若改为B a = new B();
b.gongji();    //a.gongji();
C c = new C(); //C a = new C();
c.gongji();    //a.gongji();
}
}

作以上更改程序在编译时都会报错是行不通的,所以a b c在被赋值后都会同时占用一定的内存空间,而不会立即释放的。

程序D中
...............
class wqkzt {

public void kaihuo(wuqi w) {
  w.gongji();
}
}
class D  {
public static void main(String args[]){
wqkzt e=new wqkzt();
e.kaihuo(new A());
e.kaihuo(new B());
e.kaihuo(new C());
}
}
其通过接口就可以避免了以上的情况,谁的方法被调用,内存空间就分给谁,如D,当传递的参数是new B()的时候,便使用了开始当传递的参数是new A()时的内存空间。(不知道我理解的对不对,斑竹)

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

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

编译出错是你重复声明了变量,是语法错误,和内存空间的分配是没有关系的。


我觉得你上面举的两段代码没有可比性。你的第二段代码里有赋值的操作么?(除了第一个new wqkzt();之外)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP