一、抽象类和接口的定义:
抽象类(abstract class):
使用abstract修饰符修饰的类。
实际点来说,一个抽象类不能实例化,因为“没有包含足够多的信息来描述一个具体的对象”。但仍然拥有普通类一样的定义。依然可以在类的实体(直白点就是能在{}里面)定义成员变量,成员方法,构造方法等。
抽象方法:只声明,不实现。
具体的实现由继承它的子类来实现。实际点就是:被abstract修饰的方法,只有方法名没有方法实现,具体的实现要由子类实现。
方法名后面直接跟一个分号,而不是花括号。例如:public abstract int A();
一个类中含有抽象方法(被abstract修饰),那么这个类必须被声明为抽象类(被abstract修饰)
二、接口(interface):
定义:接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。
从定义上看,接口是个集合,并不是类。类描述了属性和方法,而接口只包含方法(未实现的方法)。
接口和抽象类一样不能被实例化,因为不是类。但是接口可以被实现(使用 implements 关键字)。
实现某个接口的类必须在类中实现该接口的全部方法。虽然接口内的方法都是抽象的(和抽象方法很像,没有实现)但是不需要abstract关键字。
接口中没有构造方式(因为接口不是类)
接口中的方法必须是抽象的(不能实现)
接口中除了static、final变量,不能有其他变量
接口支持多继承(一个类可以实现多个接口)
三、可使用的修饰符:
(1)抽象方法可以有public、protected和default这些修饰符
抽象类的目的就是被继承,抽象方法就是为了被重写,所以肯定不能用private修饰符,肯定是可以用public的。但是protected和default也是可以的。
(2)接口方法默认修饰符是public。你不可以使用其它修饰符。
接口就有且只有一个public修饰。(感觉抽象类像小儿子各种耍无赖,接口就像私生子,说什么只能是什么)
总的来说,因为java中抽象类只有单继承,接口就可以实现多继承。