本质不同:抽象类是个class,接口是interface。实现抽象类需要继承extends,继承只能继承一个抽象类。接口用implements来实现,一个类可以实现多个接口。
内部方法设定不同:接口里面的方法(在JAVA8之前)都是抽象方法(JAVA8引进了默认方法和静态方法,JAVA9引入了私有方法);抽象类里面不一定全是抽象方法,甚至可以没有抽象方法。(但是类里面有抽象方法的一定是抽象类!!!)
构造函数不同:抽象类可以有构造函数(因为他是一个类);接口不能有。
访问修饰符不同:抽象方法可以有public、protected和default这些修饰符;接口方法默认修饰符是public。你不可以使用其它修饰符。
main方法:抽象类可以有main方法直接运行(因为他是一个类),接口里不能有main方法。
外部实现说明:子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。