抽象类和接口
一、抽象类
1、定义Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。
2、抽象类的特点
1)抽象类,其修饰符必须为public或者protected,不能是private,因为创建抽象类,就是要被其他类继承,用private修饰了,则不能被子类继承,子类便无法实现该方法。
2)抽象类不能用来创建对象,即抽象类不能被直接实例化,要通过其普通子类进行实例化。
3)如果一个普通子类继承于一个抽象父类,则该类一定要重写实现该父类的抽象方法。如果该子类仍然是一个抽象类,这也是允许的,就不必重写实现该父类的抽象方法,但必须用abstract修饰。
4)抽象级别:抽象类是对整体类的抽象,包含属性和方法。
5)实现类的范围不同:抽象类,其实是从子类中提取共性部分,然后抽象出来,反之,子类继承该父类就可以了,也就是说里面的抽象方法一般来自同一个类别。
6)设计方式不同:抽象类是要先有子类,然后才抽象出父类,是一种从下往上的构建法则。
二、接口
1、定义 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
2、接口的特点
1)接口中可以包含变量和方法,变量被隐式指定为 public static final,方法被隐式指定为 public abstract(JDK 1.8 之前)。
2)接口支持多继承,即一个接口可以继承(extends)多个接口,间接解决了 Java 中类不能多继承的问题。
3)一个类可以同时实现多个接口,一个类实现某个接口则必须实现该接口中的抽象方法,否则该类必须被定义为抽象类。
三、相同点
1.抽象类和接口都不能被实例化,但可以定义抽象类和接口类型的引用。
2.一个类如果继承了抽象类和接口,必须要对其中的抽象方法全部实现。(接口中方法默认的是public abstract修饰的)否则该类仍然需要被声明为抽象类。
四、不同点
1、抽象类可以有构造方法,抽象方法和具体方法。
接口不能有构造方法,而且其中的方法全部都是抽象方法。(接口中方法默认的是public abstract修饰的)
2、抽象类中的成员可以使private、默认、protected、public的。
接口中的成员全部都是public的。
3、抽象类可以 定义成员变量。
4、接口中定义的成员变量其实都是常量。