1. 普通类可以去实例化调用,抽象类不能被实例化 2. 普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写抽象类中的抽象方法,除非自己也是抽象类 3. 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变的常量 4. 抽象类和接口性质不同,抽象类是对对象的抽象,接口是一种行为规范 5. 什么时候使用抽象类,什么时候使用接口 使用接口: - 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Compareable 接口中的 compareTo() 方法; - 需要使用多重继承。 使用抽象类: - 需要在几个相关的类中共享代码。 - 需要能控制继承来的成员的访问权限,而不是都为 public。 - 需要继承非静态和非常量字段。 在很多情况下,接口优先于抽象类。因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。 另外有一点是接口中有一个叫做标记接口,例如RandomAccess
使用接口:
使用抽象类:
在很多情况下,接口优先于抽象类。因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。
另外有一点是接口中有一个叫做标记接口,例如RandomAccess