1. 抽象类
1.1 什么是抽象类
在java中用abstract关键字定义的java类为抽象类。
public abstract class Ball { }
1.2 抽象类的特性
1) 含有抽象方法(用abstract关键字修饰的方法且没有具体实现的方法体)的类一定是抽象类,而抽象类不一定含抽象方法。
2) 为了方便继承,抽象类中的抽象方法必须是public 或 protected。
3) 抽象类的抽象方法在导出类中必须覆盖实现或将导出类也声明为抽象类。
1.3 抽象类与普通类的区别
抽象类不能创建对象。
1.4 抽象类的用途
抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。
2. 接口
2.1 接口的定义
接口是用interface关键字产生一个完全抽象的类,它没有任何具体实现。
2.2 接口的特性
1) 接口中所有的域都是隐式地 public static final,所有的方法都是隐式地public abstract。
2) 允许一个类使用关键字 implements多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。
3. 抽象类和接口的区别
1) 抽象类可以有具体实现的普通方法,而接口则只能有抽象方法。
2) 抽象类中的域可以是多种数据类型,而接口中的域只能是public static final。
3) 抽象类可以包含静态的域,而接口不可以。
4) 一个类只能继承一个抽象类,而一个类可以实现多个接口。
5) 抽象类是对类整体的抽象,而接口是对类行为的抽象。如门和报警器,门都具备打开和关闭的共同点,但不是所有的门都具备报警器这个行为,这个时候我们就不能将报警器的行为定义在抽象类中,而是单独拿出来作为一个接口定义,让有报警器功能的门去实现报警器的接口。
6) 抽象类是一种模板设计,而接口则是行为设计。
参考资料: