一、abstract 抽象类关键字的特点:
1、abstract修饰的方法不能有方法体;
2、abstract修饰的方法有且只能存在于abstract修饰的类内;
3、一个普通的类继承抽象类以后,子类必须实现所有的抽象方法;
4、abstrac修饰的类不能实例化对象(创建对象),因为类内可能有抽象的方法,没有方法体,没有可执行项。
二、interface 接口关键字的特点:
1、什么是接口:
接口是一种特殊的抽象类,接口中声明的所有方法都是抽象的
使用interface关键字修饰一个接口
2、接口的用法:
定义一个类来实现接口,使用implements关键字
实现一个接口需要实现接口中所有的方法,抽象类除外
通常使用匿名内部类来实现一个接口
接口可以继承接口(多继承),使用extends关键字。 接口不能继承抽象类,因为抽象类中可能有不抽象的方法。
一个类可以实现多个接口,为了实现多态
3、接口中的方法和变量:
接口中定义的方法默认是公有的抽象的,被public abstract修饰
接口中定义的变量默认为全局常量,使用public static final修饰
三、abstract class 和 interface 的区别:
1、抽象类中可以有不抽象的方法,接口中全是抽象的方法;
2、抽象类用extends继承,接口用implements实现;
3、抽象类中的变量和方法没有默认修饰符,接口中的变量默认为public static final的,接口中的方法默认为public abstract;
4、一个类只能继承一个抽象类,一个类可以实现多个接口。
四、什么时候用抽象类,什么时候用接口:
1、如果能用接口,就不用抽象类,因为别人实现接口可以不占用继承的位置。
2、如果定义一个抽象的父类,其中所有方法都是抽象的,那么就定义为接口。
3、如果定义一个抽象的父类的时候,需要有不抽象的方法,那么只能定义为抽象类。