什么是抽象类:
1) abstract关键字声明的类;
2) 抽象方法只有方法的声明,没有方法的实现;
3)只有抽象类中,才可以定义抽象方法。
4) 抽象类不能 new ,只能new它的子类(必须实现(重写)所有抽象方法);
5) 抽象类中可以没有抽象方法, 含有抽象方法的类肯定是抽象类;
6)如果一个类继承了含有抽象方法的抽象类,那么必须实现(重写)抽象方法。
7) 抽象类中可以有普通成员(属性,普通函数,构造函数,静态成员),实际上抽象类除了可以有抽象方法之外,和普通类一模一样。
什么是接口: 如果一个抽象类中的所有方法都是抽象方法,则可以用接口表示,严格的说,接口就是特殊的抽象类。
特点:
1) 接口中所有的方法都是抽象的,默认 public abstract 修饰。 可不写,系统默认。
2) 接口中不可以有普通方法。
3) jdk1.8 新特性,可以在接口中定义默认方法,并且默认方法不用在实现类中实现,可以直接使用。
default void test(){
System.out.println("这个是默认的方法");
}
4) 接口可以继承接口,使用关键字extends
5) 如果一个非抽象类实现接口,则必须实现接口中的所有方法;抽象类实现(implements)接口,可以不去实现接口中的抽象方法。
6) 普通的类实现接口使用关键字:implements
7) 默认方法也可以被重写
8) 接口中的属性都是 public static final 。 可以不写,系统默认
9) java中不支持多继承,但是支持多实现。一个类可以实现多个接口,被实现的多个接口之间用多个逗号隔开。
10) 一个类在继承另一个类的同时还可以实现接口,extends关键字必须位于implements关键字之前。
说完了区别,那你知不知它们的相同点呢?别以为面试只问区别不问相同点哦。。
接口与抽象类的相同点:
1. 都不能被实例化。
2. 都能包含抽象方法。
抽象类与接口紧密相关。然接口又比抽象类更抽象,这主要体现在它们的差别上:
1)类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
2)抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声名必须用public来修饰没有具体实现的方法。
3)抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static fainl)。4)这一点也是最重要的一点本质的一点"抽象类是对象的抽象,然接口是一种行为规范"。
例如每个接口可以代表一种最顶层的抽象,可以理解为代表一类东西,如果一个类实现了多个接口,那这个类就有了多种类型,即接口是定义混合类型的理想工具最后:有一种设计模式,就是,默认适配模式,意思就是说,首先定义一个接口,通过抽象类实现这个接口,并实现一些子类不需要一定实现的方法,然后,子类就可以选择是继承接口,实现所有方法,还是直接继承这个抽象类实现具体需要的方法