抽象类:
首先Java中抽象方法是一种特殊的方法:它只有申明,没有具体的实现(也就是没有方法体)。
抽象类用来作为继承子类的模板的,是对具体事物的抽象。从语法看就是用abstract关键字修饰的类,含有抽象方法。如果一个类含有抽象方法,那么这个类就一定是抽象类。但是抽象类可以不含抽象方法。抽象类存在的意义就是被继承。
抽象类和一般类的区别:
1:抽象类和抽象方法必须权限修饰符必须为:public或者protect(因为需要被继承,所以不能是private),而一般类可以是private
2:抽象类不能用来创建实例,不能实例化。
3:一个类继承抽象类,则子类必须实现父类的抽象方法。否则,子类也必须为抽象类。
接口:
接口是抽象方法的集合。是对行为的抽象。接口中的方法全部必须为抽象方法。使用interface关键字修饰。接口中的任何字段都自动是static和final的,权限修饰为必须为public。
接口与抽象类的区别:
1:抽象类中可以有非抽象方法(也就是可以有成员方法的具体实现),而接口中只能有publIc abstract方法。
2:抽象类中成员变量可以是各种类型的,而接口中只能是public static final的。
3:接口中不能含有静态代码快以及静态方法,而抽象类中可以含有。
4:一个类能实现(implements)多个接口,但是只能继承(extends)一个抽象类(其他类也是一样,只能继承一个类)。
5:抽象类如果增添了新的方法,,继承其的子类可以不变。而接口中如果增加了新的方法,实现该接口的类必须相应改变。
使用抽象类和接口的场景:
1:如果想要多重继承,那么必须使用接口,java中类不能多重继承,接口可以多重实现。
2:如果基本功能在不断改变,那么使用抽象类,因为使用接口的话,改变接口内容,需要改变实现该接口的所有类。