BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #19121同步于 2011/6/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

初学java,想请教个问题

unilin540
2011/6/25镜像同步10 回复
RT~ java通过接口实现多继承,但是接口中只有方头,具体实现方法要在继承的类中实现 implements实现多接口继承,每次调用接口中的方法前都要定义一遍。 这是不是多此一举?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
solonsyd机器人#1 · 2011/6/25
不想麻烦的话,就用适配器模式
unilin540机器人#2 · 2011/6/25
【 在 solonsyd 的大作中提到: 】 : 不想麻烦的话,就用适配器模式 : -- 不懂神马叫适配器模式= = 刚接触接口,感觉就是多此一举了。 但接口总有它存在的意义,还求大牛讲解接口运用技巧。
buptlong机器人#3 · 2011/6/25
lz想知道定义接口,然后类实现这个借口比直接定义类得好处吧 【 在 solonsyd (【国家免检男】|专业小二) 的大作中提到: 】 : 不想麻烦的话,就用适配器模式
unilin540机器人#4 · 2011/6/25
【 在 buptlong 的大作中提到: 】 : lz想知道定义接口,然后类实现这个借口比直接定义类得好处吧 : 【 在 solonsyd (【国家免检男】|专业小二) 的大作中提到: 】 : : 不想麻烦的话,就用适配器模式 : ................... 内牛满面~就是这个意思。
buptlong机器人#5 · 2011/6/25
适配器模式 比如interface A有3个方法 class AAdapter implements A,实现A的3个方法,但都是空实现 这样,如果你只需要用那3个方法中的一个,你只需要extends AAdapter 重写你需要的方法,覆盖了AAdapter中的空实现即可,免去了其他2个你不需要的方法的相关处理工作 【 在 unilin540 (枫林) 的大作中提到: 】 : 不懂神马叫适配器模式= = : 刚接触接口,感觉就是多此一举了。 : 但接口总有它存在的意义,还求大牛讲解接口运用技巧。 : ...................
unilin540机器人#6 · 2011/6/25
【 在 buptlong 的大作中提到: 】 : 适配器模式 : 比如interface A有3个方法 : class AAdapter implements A,实现A的3个方法,但都是空实现 : ................... 还是没有看到它的优点= = 继承接口后也只需要写自己需要的方法,这这好像中间又多了一步。。。
buptlong机器人#7 · 2011/6/25
面向接口编程是java所推荐的 这样的好处在于尽可能的解除java类之间的耦合,作为初学者可能不好理解 举个栗子,项目经理写完10个接口里的方法声明,然后就丢给手其他程序员写里面的细节,由于接口已经统一(即每个方法传入和传出的格式已经统一),经理只需关注全局的业务就可以天天端杯咖啡走来走去了。 等你对java基本的东西掌握的差不多了,你会接触到Spring,一句话概括大概就是:面向接口编程,坐等被插入(注入) 以上都是我个人的一些理解 【 在 unilin540 (枫林) 的大作中提到: 】 : 内牛满面~就是这个意思。
unilin540机器人#8 · 2011/6/25
【 在 buptlong 的大作中提到: 】 : 面向接口编程是java所推荐的 : 这样的好处在于尽可能的解除java类之间的耦合,作为初学者可能不好理解 : 举个栗子,项目经理写完10个接口里的方法声明,然后就丢给手其他程序员写里面的细节,由于接口已经统一(即每个方法传入和传出的格式已经统一),经理只需关注全局的业务就可以天天端杯咖啡走来走去了。 : ................... 豁然开朗了~谢谢。
zhhxxx机器人#9 · 2011/6/25
【 在 unilin540 的大作中提到: 】 : RT~ : java通过接口实现多继承,但是接口中只有方头,具体实现方法要在继承的类中实现 : implements实现多接口继承,每次调用接口中的方法前都要定义一遍。 : ................... 面向接口编程还有一些好处: 1.一个功能的调用者只需要关心如何使用此功能,而无须关注功能的实现。 如:如我们在main 方法中调用一个client程序,我们只需要Client client = new ClientImpl(), 无论 ClientImpl 类中定义了多么复杂的成员函数和成员变量(包括javadoc),你都看不到,你也无须看到。 2.面向接口编程便于团队合作,有了统一的接口(接口是公开的,里面的方法都是public的),无须担心别人的程序无法使用我的实现(他根本就不关心)。假如我们团队正在做一个计算器小程序,想要计算1+2+...+100=?,product manager 写了一个接口,让两个员工分别实现,他最后看那个程序算法算得快,于是这两个员工就对接口分别做了实现。PM只需要写一个程序就可以评估他们的算法。 public int getTime(Interface in){ int a = System.currentTime(); in.run(); return Sustem.currentTime()-a; } 试想一下,如果没有接口,这个经理必须分别new这两个员工的class,然后调用可能不同的方法(A:run(), B:go())来运行。 3.(回答你的问题)接口的继承关注的是功能的扩展,而不是代码的修改。class的继承就是功能性代码的增加。两者关注的焦点不同。 本人观点: 我个人认为,接口一旦设计好了,很少需要修改,除非业务逻辑或需求有较大变动。 多继承的用途(只是举个例子): 如,SUN对一项技术写了一个规范如J2EE的JMS规范,很多vender在自己的应用服务器(如WebSphere, WebLogic, Jboss等)都要实现这一个规范,故且把这个规范叫做接口,每个vender想要对这个规范添加自己独特的功能,怎么办呢?就是用接口的继承,然后对继承了的接口做实现。 举个例子: public interface InterfaceA { /** * Comments */ public void method1(); } public interface InterfaceB { /** * Comments */ public void method2(); } public interface InterfaceAB extends InterfaceA, InterfaceB{ /** * Comments */ public void method3(); } public class InterfaceAImpl implements InterfaceA { @Override public void method1() { System.out.println("The implemention of InterfaceA."); } } public class InterfaceBImpl implements InterfaceB { @Override public void method2() { System.out.println("The implemention of InterfaceB."); } } public class InterfaceABImpl implements InterfaceAB { @Override public void method1() { System.out.println("The implemention of InterfaceAB(method1)."); } @Override public void method2() { System.out.println("The implemention of InterfaceAB(method2)."); } @Override public void method3() { System.out.println("The implemention of InterfaceAB(method3)."); } } public class Main { /** * @param args */ public static void main(String[] args) { InterfaceA a = new InterfaceABImpl(); InterfaceB b = new InterfaceABImpl(); InterfaceAB ab = new InterfaceABImpl(); a.method1(); b.method2(); ab.method3(); } } 利用多态(向上转型),我们就可以达到不同vender间接口的统一。 总之,这种情况我很少见,主要用1、2的特性。