1. A class containing abstract methods is called an abstract class. If a class Contains one of more abstract methods, the class itself must be qualified(限定,修饰) as a abstract.
  2. If you inherit from an abstract class you want to make objects of the new type, you must provide method definitions for all the abstract methods in the base class. If you don't(and you may choose not to), then the derived class is also abstract, and the compiler will force you to qualify that class with the abstract keyword.
  3. It's possible to make a class abstract without including any abstract methods. This is useful when you've got a class in which it doesn't make sense to have any abstract methods, and yet you want to prevent any instances of that class.
  4. If you do inherit from a non-interface, you can inherit from only one. All the rest of the base elements must be interfaces. You place all the interface names after the implements keyword and separate them with commas. You can have as many interfaces ay you want. You can upcast to each interface, because each interface is an independent type.
  5. 如果你创建的新的类即继承了某个类同时又实现了某些接口,那么在类声明的时候,被继承的类必须是第一个出现的,然后才是接口(如果你不这样做的话,编译器就会报错)。
  6. Keep in mind that one of the core reasons for interfaces is: to upcast to more than one base type(and the flexibility that this provides). However, a second reason for using interfaces is the same as using an abstract base class: to prevent the client programmer from making an object of this class and to establish that it is only an interface. This brings up a question: Should you use an interface or an abstract class? If it's possible to create your base class without any method definitions or member variables, you should always prefer interfaces to abstract classes. In fact, if you know something is going to be a base class, you can consider making it an interface.
  7. Normally, you can use extends with only a single class, but extends can refer to multiple base interfaces when building a new interface(The interface names are simply separated with commas).
  8. 我们知道一个接口可以继承多个接口,也可以继承一个类同时又实现多个接口,如果它继承的多个接口(或者继承的类和实现的多个接口)中有同名同参但是返回值不同的方法时会出现什么情况呢?答案是会出现命名冲突,编译不通过,因为两个方法仅仅是返回值类型不同并不能构成重载。因此我们应当尽量避免在不同的接口中用两个相同的方法名,尤其是这两个接口常常被一个类一同实现的时候更应该额外注意这一点。
  9. 在Java SE5 之前,Java 中还没有enum 关键字,接口就成为提供一组常量值的一个简便的工具(在一些遗留的老代码中可能会看到这种情况)。接口中的成员变量,自动的是public static final 的。这些值被存储在静态存储区中。
  10. 许多人痴迷于接口的特性,总是想尽办法在一切地方应用它,其实这是一种过早优化(万恶之源:P)。An appropriate guideline is to prefer classes to interfaces. Start with classes, and if it becomes clear that interfaces are necessary, then refactor. Interfaces are a great tool, but they can easily be overused.
05-11 11:26