Java基础——抽象类与接口总结

抽象类与接口的总结

抽象类

定义:类是用来描述对象的,如果一个类中没有足够的信息来描述具体的对象,那么这个类就是抽象类。
简单来说相比较于普通类,只要含有抽象方法的类我们就成为抽象类。
  1. 抽象类不能被实例化,需要依靠子类通过向上转型的方法来实例化。
  2. 当一个类继承抽象类的时候必须重写抽象类中的所有抽象方法,如果不重写所有的抽象类,则子类也必须是抽象类。
  3. 抽象类中的抽象方法必须是public或者protected,因为抽象类是要被子类继承的,如果抽象方法是private,则子类无法实现这个方法。(抽象类中的方法默认是public)。
  4. 抽象类必须被子类继承,因为抽象类无法自己实例化,需要通过子类来实例化。(抽象类的继承规则遵守普通类的继承规则)
  5. 抽象类不能使用final关键字,因为抽象类是要被子类继承的,而final定义的类是无法被子类继承的。
  6. 抽象类相比较于普通的类仅仅是多了一些抽象方法,其他部位和普通类是相同的。
  7. 抽象类中不一定含有抽象方法,但是含有抽象方法的类一定是抽象类。
  8. 构造方法和类方法不能被声明为抽象方法。

接口

定义:接口是比抽象类更高层的抽象,它是对行为的抽象,一个完全抽象的类,不想抽象类还可以有非抽象的方法等。接口要使用关键字interface来声明。
  1. 接口中的方法是不能自接口中实现的,必须要由实现接口的类来实现,一个类可以通过关键字implement来实现接口。
  2. 如果一个类没有完全实现接口中所有的抽象方法,那么这个类就必须是抽象类。
  3. 接口中的抽象方法只能是public和abstract(需要被实现接口的类重写)。
  4. 接口可以被多实现,需要使用“,”分隔开。
  5. 接口与也可以被继承,继承接口的也必须是另一个接口
  6. 接口是有默认方法的,也就是说Java中允许接口有实现方法(扩展方法),需要使用关键字default在接口修饰这个扩展方法。
    例:
public interface InterfaceTest{
   public default void show(){
   	System.out.println("这是接口中的扩展方法,我是有具体实现的方法体的");
   }
}

抽象类与接口的比较

相同点

  1. 都可以被继承。
  2. 都可以包含抽象方法。
  3. 非抽象子类都必须实现抽象方法。
  4. 都不能被直接的实例化。

不同点

  1. 接口允许多实现,抽象类只能单继承。
  2. 抽象类中允许含有非抽象的成员,接口不允许。
  3. 接口中不能含有静态代码块以及静态方法,抽象类都可以有。
  4. 抽象类中的成员变量可以是各种类型的,接口中的成员变量必须是public static final类型的。

你可能感兴趣的:(Java基础)