抽象类
语法:
[public]? abstract class 类名 [extends 父类名]? [implements 接口名1, 接口名2, ...]? {
[private | protected | public]? [static]? [final]? 类型名 变量名[ = 表达式1 [, 变量名[ = 表达式2 ... ]?]?]? ;
[private | protected | public]? 类名 (类型名 参数名1 [, 类型名 参数名n]*) { 方法体 }
[private | protected | public]? [static]? [final]? 类型名 方法名(类型名 参数名1 [, 类型名 参数名n]*) { 方法体 }
abstract [protected | public]? 类型名 方法名(类型名 参数名1 [, 类型名 参数名n]*);
}
主要是在类的声明上加上 abstract ,则类就是抽象类。
在抽象类中 或 接口中 的方法上加上 abstract,则该方法就是抽象方法。
抽象类进行实例化会直接报错,它只能作为父类。抽象类中可以没有抽象方法,也可以有多个抽象方法。
抽象类中可以有实例方法、静态方法、构造方法、成员属性。其实就是基于普通类,类体中多支持了增加抽象方法。
当一个类中: 1. 类体中明确声明有abstract方法时 2. 继承了另一个抽象类且没有实现父类中的全部抽象方法 3. 类实现了接口但没有实现其中的全部抽象方法
出现以上任何一种情况时,都必须将该类声明为抽象类。
抽象类也是一种类型,可以用来定义变量,但变量的值只能是其子类对象(因为抽象类不能有实例)。
抽象类的设计初衷是用于实现回调函数的功能(在实例方法中调用抽象方法,抽象方法由子类(用户)来实现,所以就相当于传了一个用户自定义的函数过来)。
抽象方法只能存在于抽象类中 或 接口中,且不写方法体,而是使用一个分号代替。
静态方法、构造方法、private方法、final方法 不能声明为抽象方法。
实例方法可以调用抽象方法(虽然这个方法还没实现)。
标签:java,abstract,抽象,类型,抽象类,方法,public
From: https://www.cnblogs.com/xiafl/p/17327676.html