1.抽象类
抽象类类中有可以有任意成员,本质还是类,普通类有的它都有,比如:构造器、普通方法、普通成员变量、静态成员变量等。有抽象方法的类一定要声明成抽象类,但是抽象类可以没有抽象方法。继承抽象类的普通类一定要实现抽象类的所有抽象方法,继承抽象类的抽象类可以不实现父抽象类的方法,抽象类的主要作用是用于设计。
2.接口
在jdk1.7及1.7前,接口中只能有抽象方法,jdk1.8后,接口中除了可以有抽象方法还可以有默认实现方法和静态方法。接口中的属性只能是public static final的,即如果你在接口中声明了一个属性int a,实际是public static final int a,接口中的所有方法都是public方法,接口中的抽象方法,可以不用abstract修饰,如void test(),实际上是public abstract void test()。
3.两者的相同点和不同点
(1)相同点:1.两者都不能被实例化。
2.继承抽象类和实现接口的普通类都必须实现抽象类和接口的所有抽象方法。
(2)不同点:1.抽象类中可以有任意成员,本质还是类,而接口中只有方法和属性,方法只能是 抽象方法、默认实现方法、静态方法,jdk1.7及1.7前甚至只能有抽象方法,接口 中的属性只能是 public satic final的。