java中抽象类的定义是包含一个抽象方法的类,意味着抽象类里不一定只包含抽象方法,还可以包含构造方法,抽象方法,普通方法,常量与变量。但应该注意的是,在抽象类里的普通方法一定要有方法体,而抽象方法则去掉方法体,然后加上abstract修饰符。如图:
而接口的定义为抽象方法和全局常量的集合,意味着接口里只允许有常量和抽象方法,而不能有普通方法,变量。
最重要的一点区别是:抽象类只能单继承,而接口允许多继承。如图:
但抽象类尝试多继承时,则报错。而接口多继承时,则没报错。
应该这个特点,所以在抽象类和接口都可以使用的情况下,则优先使用接口,这样避免单继承的局限。
两者关系为:抽象类可以实现多个接口,而接口不能继承抽象类,但允许继承多个接口。