一、抽象类
1.定义和使用格式
抽象方法:一种特殊的方法,只有声明,而没有具体的实现。
抽象类:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,在类前用abstract
修饰。
public abstract class ClassName {
abstract void fun();
}
2.特性
(1) 抽象类不允许被实例化,只能被继承。
(2) 抽象类可以包含属性和方法。方法既可以包含代码实现,也可以是不包含代码实现的抽象方法。
(3) 子类继承抽象类,必须实现抽象类中所有的抽象方法。如果子类没有实现父类的抽象方法,那么它也要定义为abstract类。
二、接口
1.定义和使用格式
接口:接口是对行为的一种抽象,相当于一组协议或者契约;调用者只需要关注抽象的接口,不需要了解具体的实现。
public interface InterfaceName {
}
2.特性
(1) 接口可以有成员变量,但是成员变量只能是public static final
类型的。
(2) 接口只能声明方法,方法不能包含代码的实现。
(3) 类实现接口的时候,必须实现接口中声明的所有方法。
三、抽象类和接口的区别
1. 语法层面
(1) 抽象类中可以提供成员方法的实现,而接口不行;
(2) 抽象类的成员变量可以是各种类型的,但是接口中的成员变量只能是public static final类型的;
(3) 抽象类中可以含有静态代码块和静态方法,而接口不行;
(4) 抽象类可以含有构造方法,而接口不行;
(5) 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2. 设计角度
抽象类是对成员变量和方法的抽象,是一种 is-a 关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性。
四、其他
要“基于抽象而非实现编程”,我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展性、可维护性。
网友评论