一、抽象类
格式:
abstract class 类名{
属性;
访问权限 返回值类型 方法名称(参数){ //普通方法
return 返回值;
}
访问权限 abstract 返回值类型 方法名称(参数);//抽象方法
//抽象方法是没有方法实体的
}
java中可以专门创建一个类用来作为父类,这种类成为“抽象类”,作用类似于“模版”,目的是要让设计者依据他的格式来修改并创建一个新的子类,只能由抽象类派生出新的子类,在有这个子类来创建对象。
-
抽象类的定义和使用规则
1、包含一个抽象方法的类必须是抽象类
2、抽象类和抽象方法必须要用abstract关键字修饰
3、抽象方法只用声明,不需要实现
4、抽象类必须要被子类继承,子类(如果不是抽象类)必须要覆写所有的抽象方法
-
抽象方法不可以用final关键字声明,因为我final声明的类、方法、属性,均不能被修改,抽象方法必须要被子类继承并覆写抽象方法。
-
抽象类可以定义构造方法
抽象类依然是用的是类的继承关系,而且抽象类也包含着各个属性,所以子类在实例化之前必须先对父类进行实例化。
子类对象在实例化之前会默认调用父类的无参构造函数,此时子类隐含了一个super来调用父类的构造。
-
抽象方法不能使用private声明
-
抽象类与普通类
抽象类与普通类其实就是多定义了一个抽象方法,除了不能直接进行对象的实例化外,其他操作并没有什么不同。
二、接口
格式:
interface 接口名称{
全局常量;
抽象方法;
}
-
抽象类与接口的关系
序号 | 区别点 | 抽象类 | 接口 |
1 | 定义 | 包含一个抽象方法的类 | 抽象方法和全局常量的一个集合 |
2 | 组成 | 构造方法、普通方法、抽象方法、常量、变量 | 全局常量、抽象方法 |
3 | 使用 | 子类继承抽象类(extends) | 子类实现接口(implements) |
4 | 关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类、但允许继承多个接口 |
5 | 常见设计模式 | 模版设计 | 工厂设计、代理设计 |
6 | 对象 | 都通过对象的多态性产生实例化对象 | 都通过对象的多态性产生实例化对象 |
7 | 局限 | 抽象类有但继承的局限 | 接口没有此局限 |
8 | 实际 | 作为一个模板 | 作为一个标准或者一个能力 |
9 | 选择 | 如果抽象类和接口都可以使用,优先选择接口 | 如果抽象类和接口都可以使用,优先选择接口 |
10 | 特殊 | 一个抽象类可以包含多个接口 | 一个接口可以包含多个抽象类 |