`
DoubleEO
  • 浏览: 159093 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对接口的概念一直不理解,请畅所欲言,谈谈自己的理解

阅读更多
接口,java中很重要的概念。
在大学的时候(当然了,我大学没怎么学习,混了),对接口的认识就是,它是一种规范,里面都是抽象方法,没有具体实现,也就是没有这些方法的方法体,实现它的类,一定要实现它的方法。哎,这些话,只要你看过一次介绍接口的资料,谁都会说。
后来工作了,结果所有同事都只会说这些话,而且都认为自己很好的理解了。
随着看书的学习,我知道了接口和多态,后期绑定这些概念,要在一起理解,比如现在有个方法a,参数可以是接口类型的引用,然而最后传递进去的参数,都是实现了这个接口的类的对象,这里就要理解多态和后期绑定了。从而能看出接口的好处了:方法a的参数是接口的引用,你就不用对这这个接口的好几百种实现,每个实现写一种方法了,只是对接口类型写,然后通过多态和后期绑定,这都是java自己帮你完成的,修改起来也方便,毕竟只有一个方法,要是再有新的实现也没问题,如果不这样,每有一个新的实现,就要再写一个方法。
如下:

接口是处理字符串用的。
interface Processor{
	 public String name();
	 Object process(Object input);
}
1.实现类是变大写的
class Upcase implements Processor{
        public String name(){
		return getClass().getSimpleName();
	}
	String process(Object input){
		return ((String)input).toUpperCase();
	}
}
2:实现类是变小写的
class Lowercase implements Processor{
        public String name(){
		return getClass().getSimpleName();
	}
	String process(Object input){
		return ((String)input).toLowerCase();
	}
}
3.实现类是分隔字符串的
class Splitter implements Processor{
        public String name(){
		return getClass().getSimpleName();
	}
	String process(Object input){
		return Arrays.toString(((String)input).split(" "));
	}
}

public class Apply {
	public static void process(Processor p ,Object s){
		System.out.println("Using Procsssor"+p.name());
		System.out.println(p.process(s));
	}
	public static String a ="Dinnger Ni hao Wo ai kkkkkkkkkkkkKKKKKKKKK";
	public static void main(String[] args) {
		process(new Upcase(), a);
		process(new Lowercase(), a);
		process(new Splitter(), a);
	}

}
写了一个process方法,其中参数有Processor p,就是我最开始叙述的那样。

目前我就理解了接口的这2点,但是很多次再看到接口,还是很迷惑,不明白
第一点好想:是规范吗,你在某一领域经验太少,人家就帮你写好规范,你只要照着全实现了,就可以了。就完成了。
比如让你实现ServletContext监听器,你不会,人家告诉你,你只要实现2个接口ServletContextListener和ServletContextAttributeListene,就行了。你就实现去把。
第二点呢,就是这些上述代码,我看了看人家写的文章,叫面向接口编程,也不知道我理解的对不对。就是对着接口编,然后由它的实现类来最后解决问题。
最近看jsp,request对象的类型是接口,但是你可以用这个对象得到参数啊,或者用它的其他方法,我就不明白了,我也没写实现啊,怎么就能用它的方法了呢,后来明白了,这叫内置对象,就是可以直接用,你自己不用写实现。但是,我看很多资料,都是接口类型的引用,就可以直接调它的方法了。我根本没写实现,也没找到它在哪写的实现,反正就是能调用它的方法了。

我在公司也像很多人问过,都很瞧不起我,觉得我还在搞java基础的东西,但是他们也不能解答,在他们眼里,不需要这些东西,会用就行,不用知道为什么这样用。我不想这样,所以很想搞明白它。java基础是最重要的。


希望大家能谈谈自己的理解,教教我,使我能开一下眼界。

最后附上我总结的java绑定,也是从一本书上看到的,然后再自己理解一下:
就是A,B有继承关系,他们都有方法f(),现在A a = new B(),
a.f()到底调用谁的f()。

1) 实例方法与引用变量的实际引用对象的方法绑定,这是动态绑定,java虚拟机决定的。
2) 静态方法与引用变量所声明的类型的方法绑定。这属于静态绑定,编译期就绑定了。
3) 成员变量与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,编译期就绑定了。

分享到:
评论
7 楼 DoubleEO 2008-11-08  
yunhaifeiwu 写道
 
举个例子:

   我要写一个java应用程序.如:学生基本资料维护.

   学生基本资料表,不是有有限几个字段吗?
假定有no,name.学生资料维护,不就是把提供一个窗口,把用输入的数据存入数据库中,
然后从数据库提出用户关心的资料,展现出来.

    如果用非接口方法是怎样做呢? 弄一个form,上面放上两个textfield控件,
弄几个新增,保存之类的按钮.然后在程序里用jdbc之类,把用户的数据与数据库的数据同步起来.

    如果基于接口,怎样做呢?
    1 先想着是要做通用的,我写了这个程序,基他类似的教师表啊之类的,也能通过修改配置就能用.
    2 经观察,这种方式的,都是新增、修改、删除、查询、显示是共同的。因此要把这一部份封装起来,
当然也要产生一个接口,以便于其他单元程序交互。

     3 经观察,表的字段是不等的,但当表确定后,字段就确定了。与之相对应的显示的textfield之类的,

个数也是等的,但当表确定后,textfield个数也应确定了。表的字段,与textfield有一一对应关系。

    因此需要用一个数据结构,来反映这种情况表达这种情况。设计一个类DataClass:设两个Map属性,一个Map的元素存表的字段,一个map的元素存textfield.

    4 当一个表确定后,把具体的表名与字段,及希望的控件类型,指定出来。

    5 程序启动时,先找配置文件,动态产生存字段的变理,与控件,然后存入DataClass实例的两个map中。当用户按了操作命令,把相应的数据存入DataClass实例中,再把它传给命令处理程序。命令处理程序,根据DataClass
动态生成sql语句,然后存入数据库中。

   以上仅是简要的描述。牵扯的具体东西很多。总之一个原则:核心关键部份,仅公能的通过接口与其他程序交互,

各个核心部件,仅可能以配置方式把程序焊接起来。原始数据,中间数据尽可能的用一个数据结构表达,并写成许多的类。所有的程序部件,都得到相应的数据结构装载的数据,自已选所需的数据处理,处理完,不能把数据固定起来,
必须放在相应的数据结构中,并传给相关的其他程序。仅仅只有输入程序不通过数据结构直接得到原始固定的数据,输出程序不需放在数据结构中输出数据。

   好了,这种东东全靠自已领悟。我的表达也不是很好。自已站在设计需求不断变化的情况下,思考。也许会对你的
有关程序设计思想有帮助。

   在结束之时:数据结构,接口,设计模式,这些东东,要深领悟,挖出其本质。设计模式中有一原则:
封装变化点,一点要注意领悟,这是设计模式至高精华。

   本人回贴,仅是自已的理解与好心,别无他意,根本不想陷入口水战之中。如果有人意见相佐,仁者见仁,智者见智吧。十年的经验与理解,不是什么人都能改变的。


多谢赐教啊~我先消化消化
6 楼 yunhaifeiwu 2008-11-08  
 
举个例子:

   我要写一个java应用程序.如:学生基本资料维护.

   学生基本资料表,不是有有限几个字段吗?
假定有no,name.学生资料维护,不就是把提供一个窗口,把用输入的数据存入数据库中,
然后从数据库提出用户关心的资料,展现出来.

    如果用非接口方法是怎样做呢? 弄一个form,上面放上两个textfield控件,
弄几个新增,保存之类的按钮.然后在程序里用jdbc之类,把用户的数据与数据库的数据同步起来.

    如果基于接口,怎样做呢?
    1 先想着是要做通用的,我写了这个程序,基他类似的教师表啊之类的,也能通过修改配置就能用.
    2 经观察,这种方式的,都是新增、修改、删除、查询、显示是共同的。因此要把这一部份封装起来,
当然也要产生一个接口,以便于其他单元程序交互。

     3 经观察,表的字段是不等的,但当表确定后,字段就确定了。与之相对应的显示的textfield之类的,

个数也是等的,但当表确定后,textfield个数也应确定了。表的字段,与textfield有一一对应关系。

    因此需要用一个数据结构,来反映这种情况表达这种情况。设计一个类DataClass:设两个Map属性,一个Map的元素存表的字段,一个map的元素存textfield.

    4 当一个表确定后,把具体的表名与字段,及希望的控件类型,指定出来。

    5 程序启动时,先找配置文件,动态产生存字段的变理,与控件,然后存入DataClass实例的两个map中。当用户按了操作命令,把相应的数据存入DataClass实例中,再把它传给命令处理程序。命令处理程序,根据DataClass
动态生成sql语句,然后存入数据库中。

   以上仅是简要的描述。牵扯的具体东西很多。总之一个原则:核心关键部份,仅公能的通过接口与其他程序交互,

各个核心部件,仅可能以配置方式把程序焊接起来。原始数据,中间数据尽可能的用一个数据结构表达,并写成许多的类。所有的程序部件,都得到相应的数据结构装载的数据,自已选所需的数据处理,处理完,不能把数据固定起来,
必须放在相应的数据结构中,并传给相关的其他程序。仅仅只有输入程序不通过数据结构直接得到原始固定的数据,输出程序不需放在数据结构中输出数据。

   好了,这种东东全靠自已领悟。我的表达也不是很好。自已站在设计需求不断变化的情况下,思考。也许会对你的
有关程序设计思想有帮助。

   在结束之时:数据结构,接口,设计模式,这些东东,要深领悟,挖出其本质。设计模式中有一原则:
封装变化点,一点要注意领悟,这是设计模式至高精华。

   本人回贴,仅是自已的理解与好心,别无他意,根本不想陷入口水战之中。如果有人意见相佐,仁者见仁,智者见智吧。十年的经验与理解,不是什么人都能改变的。
5 楼 yunhaifeiwu 2008-11-08  
刚才吃饭了.是自我的经验与理解,仅供参考.

软件工程中,有一节是这样说的:

写程序,就是把一些原始数据,输入到程序中,经过系列的变化,输出另外的数据.

在这里,我们有两种理念来编程:

1 有部份原始数据,与程序产生的中间数据,直接与程序结合,该怎么简便就怎么写.
也说是说:程序中为了方便,尽可能的把数据固定在核心程序中写.

2 第二种,基于接口写程序.
  观察原始数据,与中间数据的特点,分类整理用不同的数据结构进行表示.这些数据绝不
直接传入程序的核心部份,而是通过接口传入核心程序部份,核心程序仅仅是把接口送过来的
数据,按数据特点进行变化处理,产生的结果,再用一定的数据结构组织起来,再通过接口传送
给程序的基他部份.各个程序的核心单元,之间如果有联系,也必须通过接口进行联系.

凡是有接口与实现的部份,尽可能的通过配置方式确定他们的关系.程序功能最终的实现,是靠配置
把各个个接口的实现类指定后,该程序再能完成任务.当任务变化时,也仅仅修改配置文件,或写几个
接口的实现类就行了.

基于接口的方式:给人感觉是脱了裤子放屁,显得步骤很烦多,工作量很多.呵呵,接口编程,本身
是为了需求变化复杂,程序功能很多,且在变化之中而用的.试想:要是弄一个鸡窝,也把建高楼的方法
搬过去,这是什么感觉?

4 楼 DoubleEO 2008-11-08  
yunhaifeiwu 写道
你也太急了.

没急啊,你说的那些,都是书上有的,具体怎么理解,希望你能赐教啊
3 楼 yunhaifeiwu 2008-11-08  
你也太急了.
2 楼 DoubleEO 2008-11-08  
yunhaifeiwu 写道


接口,是什么玩意?

就是方法与实现相分离的玩意.

其作用有:
   1 解耦
   2 在设计中,可以让互不相干的类的对象可以互相转化.
   如:在设计过程中,需要两个类的变理,可以互相强制转换,此时,可让这两个类,
都实现同一接口.

 
    

能具体说说吗?你是怎么理解的,解耦我也老看到,字面意思也懂,具体不知道。
互不相干的类相互转化,是不是适配器模式啊,我看过一些,没有用到过实际中。实现和分离,这个我知道,老听人家说,具体怎么理解,能说一下吗
1 楼 yunhaifeiwu 2008-11-08  

接口,是什么玩意?

就是方法与实现相分离的玩意.

其作用有:
   1 解耦
   2 在设计中,可以让互不相干的类的对象可以互相转化.
   如:在设计过程中,需要两个类的变量可以互相强制转换类型,此时,可让这两个类,
都实现同一接口.

   在现实生活中:我们可以基于框架造房子,在软件中我们可以基于接口写软件.

   基于框架造房子:主体设计好外,门窗砖及室内室外装修装饰的变化,将展现出不一样的外观,满足不同的的人群需要.

   基于接口写软件:主体设计好了,改变实现类,就能改变软件的某方面的功能,适应不同的需求.当需求变化时,仅改变
接口的实现类.

   引申与扩展:

    接口的两个作用,完全可用任何的普通类进行模拟.差别在于:接口是由语言强制把方法与实现相分离,
而用类模拟的接口,是由程序员自我约定.

   由类模拟的接口,常常隐约表现在这些场所:1 设计模式中的适配器;2 注入式解耦的情况中.

为什么说适配器隐约模拟了接口呢?
理由:
   适配器本身不是方法的最终执行者,最终执行者落脚于传入适配器的对象.如果传入适配器的对象为null,
则该适配器无法完成工作.

到此为止,自已领悟!
 
    

相关推荐

    初中语文语文论文让学生畅所欲言

    教师应当帮助学生理解并接纳自己的情绪,学会以恰当的方式表达疑惑、挫折和不满,从而促进学生情感的成熟和自我认知能力的提升。此外,教师应避免对作文选材提出过于单一和刻板的要求,以免学生为迎合标准而失去创新...

    小学三年级阅读理解专项训练.doc

    此外,还可以让学生畅所欲言,表达自己对这两个艺术家的敬意和想对他们说的话。这样的互动不仅能够锻炼学生的思维逻辑能力,还能够鼓励他们在现实生活中保持积极向上的态度。 接下来,让我们来探讨第二篇故事所蕴含...

    畅所欲言:古今燃料的变化.ppt

    畅所欲言:古今燃料的变化.ppt

    《一个中国孩子的呼声》教学设计.doc

    通过讨论如何制止战争、保卫和平,学生可以交流各自的想法,理解自己在和平建设中能够扮演的角色。教师应当鼓励学生畅所欲言,提出自己的见解,并在此基础上引导他们思考如何将这些想法应用到实际行动中。 课外拓展...

    四年级语文上册 父爱深深 3教案 语文A版.doc

    教师应当鼓励学生畅所欲言,分享自己的感悟和联想,以此来加深对亲情的理解。 教案的最终目的是要让学习回归生活,鼓励学生在实际生活中向父母表达自己的爱和感激之情。通过这一实践活动,学生能够将课堂上所学到的...

    八年级政治隐私和隐私权 (说课稿)人教版.doc

    1. **隐私和隐私权的概念**:隐私是指个人生活中不愿公开或不愿让他人知悉的信息、活动或领域。隐私权则是指公民有权保护自己的私生活秘密和个人信息,不受非法侵犯,包括个人信息、通信秘密、私人空间等。 2. **...

    听的技巧之如何拉近与顾客的关系.pptx

    在IT行业中,与客户建立良好的关系至关重要,而有效...记住,真正的沟通不只是听声音,更是理解和尊重对方的感受。通过倾听,我们可以更有效地解决客户的问题,提升自身的专业形象,从而在竞争激烈的IT行业中脱颖而出。

    人教版七年级上册道德与法治教案:第三课 发现自己.docx

    3. **活动三:畅所欲言** - 分析小刚的例子,讨论不正确的自我认知可能带来的负面影响,强调正确自我认知的重要性。 4. **活动四:我眼中的我** - 学生从不同角度(如身体特征、心理特征、人际关系)来认识自己,...

    四川省宜宾市一中2015_2016学年高一语文上学期15周周考题

    通过对这些内容的深入学习和实践,学生们能不断提升自己对语文知识的掌握,并加强对传统文化和现代电影技术的理解。 首先,成语运用部分主要考察学生对汉语成语的理解和应用。成语作为汉语的精髓之一,每一条成语都...

    冀教版初中数学九年级上册 25.4 相似三角形的判定 导学案 .doc

    4. **畅所欲言**:鼓励学生反思学习成果,提出疑问,分享自己的理解和困惑,以促进自我评估和同伴间的互助学习。 5. **当堂检测**:通过填空题和证明题,巩固学生对相似三角形判定的应用,例如补充条件使得两个...

    五年级语文上册 第八单元 26 忆读书第1课时教案 新人教版-新人教版小学五年级上册语文教案.doc

    在交流活动中,让学生畅所欲言,分享对文章的理解,讨论他们心中的“好书”。这样的活动不仅能够锻炼学生的语言表达能力,还能够加深他们对于读书乐趣的体会。 总体而言,《忆读书》这篇课文的教学目标是培养学生的...

    (中小学教育)一枚金币PPT课件.ppt

    - **畅所欲言**:讨论老人的教育方式和目的,理解劳动与财富之间的关系。 - **听写词语**:强化对词语的记忆,如“省吃俭用”、“懒惰”等,提高语言运用能力。 - **续写故事**:鼓励学生发挥想象力,设想故事的...

    五年级语文下册 诺曼底号遇难记 1教案 冀教版.doc

    同时,也不能忽视对朗读技巧的指导,这对于帮助学生更好地理解文章内涵,感受作者的情感是十分必要的。 通过本篇课文的学习,学生不仅能学到语文知识,更能在潜移默化中接受到深刻的价值观教育。在灾难面前哈尔威...

    五年级语文下册 4.3和小鸟最相亲爱教案1 长春版-长春版小学五年级下册语文教案.doc

    8. **课堂活动**:课堂上鼓励学生畅所欲言,分享自己的观察和感受,培养他们的表达能力和批判性思维。同时,通过朗读和讨论,提高学生的文学鉴赏能力。 9. **作业设计**:布置作业要求学生深入研读写小鸟的部分,...

    教案《四边形分类》.doc

    因此,本节课的设计对于学生全面理解和运用四边形的概念具有显著的意义。 首先,教师需要向学生明确四边形的定义:四边形是由四条直线段首尾相连构成的闭合图形,具有四个顶点和四条边。为了加深学生对四边形的理解...

    初中道德与法治《遵守规则》优质教学设计、教案.pdf

    7. **学情分析**:考虑到八年级学生的认知发展阶段,他们可能对规则与自由的关系理解不深,主要依赖他律而非自律。因此,教学设计要注重引导学生深化理解,从规则的运行、改进等角度培养他们的规则意识,促进自律...

    部编版七年级上册道德与法治第六课师生之间期末复习导学案.pdf

    8. 应对师生关系的建议:对于建立“畅所欲言”的师生关系,学生可以做到以下几点:(1)尊重老师,理解他们的辛勤付出;(2)敢于表达自己的观点,但要注意方式和时机;(3)对老师布置的作业有疑问时,可以积极沟通...

    五年级语文上册 乡下人家 1教案 北京版 教案.doc

    - **畅所欲言**:让学生通过朗读和表达,分享他们对乡村生活的感受和想象的画面。 - **作业**:朗读课文,摘抄优美的句子,巩固学习成果。 5. **板书设计**: - 板书突出“独特”和“迷人”两个关键词,强调乡村...

    学年六年级语文下册 第三单元 11《灯光》说课稿 新人教版-新人教版小学六年级下册语文教案.doc

    教学难点是如何帮助学生理解郝副营长的“憧憬”与其英雄行为之间的联系,即他为了实现下一代能在电灯下读书的愿望而牺牲自己。 在教学方法上,遵循新课程标准,采用以读为主的方法,强调学生的自主阅读、理解、欣赏...

    《春潮》语文天地教案.doc

    首先,通过展示生词,让学生理解和体会动词在句子中的作用,然后通过小组讨论加深对词汇的理解。教师鼓励学生在理解词义的基础上进行组词练习,甚至尝试用新词进行简单的口语表达,以提升他们的语言组织能力。此外,...

Global site tag (gtag.js) - Google Analytics