Java接口
这片文章用来搜集资料来解决 1什么是接口 2 接口能用来干吗 这两个问题的.
接口是什么?(下面对接口的描述每个观察的角度所呈现的都略有不同,不过隐藏在这些话背后的本质的东西就是这个问题的答案)
在Java中,接口不是类,而是一组对类的要求,这些类要与接口一致。<<Java2核心技术第I卷>>
当一个类实现了一个接口的时候,这个接口被用做一个类型(type),通过此类型可以引用这个类的实例,因此,一个类实现一个接口,就表明客户可以对这个类的实例实施某些动作.为了任何其他目的而定义接口是不合适的.<<Effective Java>>
常量接口模式是对接口的不良使用. <<Effective Java>>
总之,接口应该只是被用来定义类型的,它们不应该用来导出常量. <<Effective Java>>
(PS:Joshua Bloch有sun标准库设计和维护的经验,所以他对于接口的认识是从库结构设计的角度观察的.他觉得常量接口模式会弄脏实现该接口的类可能是出于他是一个类库的实现者,事实上,我觉得常量接口模式还是很有用和方便的.)
接口(interface)和内部类(inner class)为我们提供了一种用来组织和控制系统中的对象的更加精致的方法. <<Thinking in Java 3rd >>(PS:我更倾向于用这种角度看接口)
虽然这些特性本身是相当直观的,(PS:这里的特性指的是接口和内部类)但是就像多态机制一样.这些特性的使用应该是设计阶段考虑的问题.(PS:接口应该在程序设计的时候就好好考虑了)<<Thinking in Java 3rd >>
接口是为支持运行时态方法解决设计的.通常,为使一个方法可以在类间调用,两个类都必须出现在编译时间里,以便Java编译器可以检查以确保方法特殊是兼容的.这个需求导致了一个静态的不可扩展的类环境.在一个系统中不可避免的会出现这类情况,函数在类层次中越堆越高以致该机制可以为越来越多的子类可用.接口的设计避免了这个问题.他们把方法或方法系列的定义从类层次中分开.因为接口是在和类不同的层次中,与类层次无关的类实现相同的接口是可行的,这是实现接口的真正原因所在. (PS:这也是众多参考书中建议使用接口而不推荐使用继承的原因之一) <<Java2参考大全>>
I see interfaces as a fundamental tool for achieving flexibility in the design of Java-based systems. Any class can provide an implementation of an interface. As long as you don't change the interface itself, you can make all kind of changes to the implementing classes, or plug in new classes, without impacting code that depends only on the interface. Thus, if you have a subsystem that represents an abstraction that may have multiple implementations, whether the subsystem is a single object, a group of objects, an entire Java applet or application, you should define Java interfaces through which the rest of the world communicates with that subsystem. When you use interfaces in this way, you decouple the parts of your system from each other and generate code that is more flexible: more easily changed, extended, and customized. (article:<<Designing with interfaces>>)(PS:对接口的一个较完善的总结,写的很不错。)
接口能干什么?
有些接口只定义了常量,而没有定义方法。例如,标准库中有一个SwingConstants接口,它定义了NORTH,SOUTH,HORIZONTAL等常量。任何实现了SwingConstants接口的类都自动继承了这些常量。这些类中的方法可以直接访问NORTH,而不必使用SwingConstants.NORTH.(<<Java2核心技术第I卷>>P202)
Java's interface gives you more polymorphism than you can get with singly inherited families of classes, without the "burden" of multiple inheritance of implementation. (article:<<Designing with interfaces>>)
Some say you should define all classes in terms of interfaces, but I think recommendation seems a bit extreme. I use interfaces when I see that something in my design will change frequently. (article:<<Designing with interfaces>>)
In designing a Java-based System,you should use Java interfaces to represent abstract interfaces – the ways in which the parts will interfact with each other. (article:<<Designing with interfaces>>)
其他关于接口的参考:
|
在Java使用接口来实现同样功能的回调函数 |
摘要:
public interface InterestingEvent
public class EventNotifier
public class CallMe implements InterestingEvent
|
窗体顶端