抽象和接口是支持抽象方法的两种机制,也是平时使用最频繁的内容,在架构设计方面也有很多涉及。通过本文进行一下知识点的整理。如果有不准确的地方,还请指正。
1. 抽象
1.1 首先明确什么是抽象方法,只有声明,没有具体方法体的方法我们称之为抽象方法,使用abstract进行修饰
1.2 含有抽象方法的类,我们叫做抽象类。PS:之前一次面试,一个小姐姐问我抽象类是不是必须含有抽象方法,我当时认为,抽象类的主要作用是,通过定义抽象方法来定义行为,然后通过子类继承抽象方法进行具体的实现。这才是抽象方法存在的意义。可是人家说抽象方法只要生命成abstract的,即使不包含抽象方法,那么他也是抽象方法。我T.T,那这个类声明成抽象类干嘛.. 不过回来查书发现,确实有这种说法,所以还是记住这个概念吧-》抽象类可以不包含抽象方法
1.3 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象;
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
2. 接口
2.1 接口是将方法抽象出来,然后共别人调用
2.2 接口中可以含有变量和方法,但是变量都被定义成public final static , 方法被定义为public abstract
2.3 一个类可以实现多个接口
3 接口和抽象类的区别
3. 1.语法层面上的区别
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
3.2.设计层面上的区别
1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。