一、抽象类
格式:
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 |
特殊 |
一个抽象类可以包含多个接口 |
一个接口可以包含多个抽象类 |