抽象类:
1、抽象方法是只有方法签名,没有方法实现的方法。
2、抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。
3、*抽象方法不能有方法体*
4、抽象类不能被实例化,即使抽象类里不包含抽象方法,也不能创建实例。
5、抽象类的构造器不能用于创建实例,主要是用于被其子类调用。
接口:
1、接口里不能包含普通方法,接口里所有方法都是抽象方法。
2、一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
3、由于接口定义的是一种规范,接口里不能包含构造器和初始化块定义。
4、接口里的属性只能是常量,接口里的方法只能是抽象方法。
5、接口里所有成员,包括常量、方法、内部类和枚举类都是public访问权限。
定义接口成员时,可以省略访问控制修饰符,如果指定访问控制修饰符,只能使用public访问控制修饰符。
对于接口里定义的常量属性,系统自动为这些属性增加static和final两个修饰符.
int MAX_SIZE = 50;
public static final int MAX_SIZE = 50;//这两行代码结构一样
接口中的方法总是使用public abstract来修饰的。
实现接口方法时,必须使用public访问控制修饰符,因为接口里的方法都是public的,而子类重写父类方法时
访问权限只能更大或者相等。
接口和抽象类相同点:
1、都不能实例化
2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
接口和抽象类不同点:
1、接口里只能包含抽象方法,抽象类则可以包含普通方法。
2、接口里不能定义静态方法,抽象类里可以定义静态方法。
3、接口里只能定义静态常量属性,不能定义普通属性,抽象类里都可以
4、接口里不包含构造器,抽象类里可以。
5、接口里不能包含初始化块,抽象类可以
6、接口多实现,抽象类单继承。