一、抽象类(abstract class)
抽象类中的方法可以是抽象的也可以是非抽象的(包含两个特殊的情况,全部是抽象方法和全部是非抽象方法)。对于抽象类中的方法全部是非抽象的情况,这是为了传宗接代-----强制让其子类继承
二、接口 (interface)
接口中的方法必须全部是抽象的,并且有默认的public abstract修饰,所以要注意一点,当子类实现接口的时复写接口中的方法要注意权限的问题;接口里面的成员变量有默认的public static final 修饰,所以要注意,这些成员变量只允许读,不允许写
三、二者用法上的不同
对于java只支持单继承,为了解决这个问题java提供了多实现机制。二者用法的不同,抽象类被继承复写方法是正常的按部就班的使用,而接口是为了补充添加的作用。例如在集合框架中,TreeSet这个容器要想存储不重复的学生对象(学生对象是从人继承而来的),那么需要怎么做呢?由于学生继承人,学生没有比较的特性,但是java提供了一个接口Comparable,此接口强行对实现它的每个类的对象进行整体排序,那么只需要让学生类实现Comparable接口即可使其具有比较性(这时Comparable接口就是补充学生类的特性----使其有比较性)
另:若二者中的抽象方法不全被子类对象复写实现,那么得到的子类是抽象类。
|