抽象类
定义
通过abstract(抽象)关键字修饰的类为抽象类。
概念
对事物进行分析时,发现了共性,将这些共性抽取出来。此时抽取方法功能声明相同,但方法功能主体不同。
特点
单继承,一个类只能继承一个抽象(超)类
抽象类通过关键字abstract(抽象)修饰。
抽象类可以没有抽象方法。
一个类若是有一个抽象方法,那么这个类必须被修饰为抽象类。
抽象类不能被实例化,但是可以通过向上转型,由继承该抽象类的子(派生)类实例化。
子(派生)类必须重写父(抽象)类的所有抽象方法,才能实例化对象,否则还是抽象类。
抽象类中的抽象方法没有方法体。
抽象类和抽象方法的定义
抽象类定义的格式:
abstract class 类名 {}
抽象方法定义的格式:
可以有成员变量;但是接口的成员变量必须是final
public abstract 返回值类型 方法名(参数); PS:没有{ }方法体
细节
1.抽象类可以定义普通方法和成员变量吗?
可以。抽象类可以定义普通方法,但是其作用是保存共性,而且本身不可以实例化,所以若是想让子(派生)类使用,则需要定义为抽象方法。也可以定义普通的成员变量。
2.抽象类可以定义静态抽象方法吗?
不能。抽象类不能有静态抽象方法。定义抽象方法的目的是让子类重写此方法,如果定义成静态方法就不能被重写。因为抽象类不能实例化所以不能被分配内存,而static修饰的方法在类实例化前就分配了内存,矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。
3.抽象类一定是个父类?
是的。因为抽象类本身无法直接实例化,要由子类继承后重写其所有抽象方法。
4.abstract关键字不可以和哪个关键字共存?
private:私有的方法子类无法继承,所以也不存在重写。而abstract和private一起使用修饰方法,抽象类既要子类去实现这个方法,又不让子类继承到该方法,所以不可以共存。
总结
继承抽象类,是对共性的抽取和封装,提高复用性和扩展性。
接口和抽象类的区别,百度经验有一篇图文挺好的。链接