包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。
如果从一个抽象类继承,并想创建改新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。
如果不这样做(可以选择不做),那么导出类便也是抽象类,并且编译器会强制我们使用abstract关键字来限定这个类。
创建抽象类和抽象方法非常有用,因为它们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。
抽象类还是很有用的重构工具,因为它们使得我们可以很容易得将公共方法沿着继承层次结构向上移动。
接口被用来建立类与类之间的协议。
创建接口用关键字interface,可以在interface关键字前面添加public关键字(但仅限于该接口在于其同名的文件中被定义)。如果不添加public关键字,则它只具有宝访问权限,这样它就只能在同一个包内可用。
接口也可以包含域,但是这些域隐式地是static和final的。
使用接口的核心原因:为了能够向上转型为多个基类型(以及由此而带来的灵活性)。
第二个原因是与使用抽象基类相同:防止客户端程序员创建该类的对象,并确保这仅仅是创建一个接口。