抽象类:
- 包含一个抽象方法的类必须是抽象类
- 抽象类和抽象方法都要使用abstract关键字声明
- 抽象方法只需要声明而不需要实现
- 抽象类必须被继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法
注意:抽象方法不要用private声明,如果使用private声明,子类将无法覆写
PS:抽象类允许构造方法,在子类对象实例化前会默认调用父类的无参构造
接口:
由全局常量和公共的抽象方法所组成.(所以代码二可简写成代码一)
代码一:
interface A{ // 定义接口A String AUTHOR = "Tom" ; // 全局常量 void print() ; // 抽象方法 String getInfo() ; // 抽象方法 }
代码二:
interface A{ // 定义接口A public static final String AUTHOR = "Tom" ; // 全局常量 public abstract void print() ; // 抽象方法 public abstract String getInfo() ; // 抽象方法 }
注意:接口中如果不写public,则也是public访问权限
实际应用:
抽象类的实际应用:可以用来设计模板(比如请假条)
接口的实际应用:可以用来指定标准(比如USB标准)
小结:
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。
抽象类与接口的关系 | |||
序号 | 区别点 | 抽象类 | 接口 |
1 | 定义 | 包含一个抽象方法的类 | 抽象方法和全局常量的集合 |
2 | 组成 | 构造方法,抽象方法,普通方法,变量,常量 | 全局常量,抽象方法 |
3 | 使用 | 继承/extends | 实现/implements |
4 | 关系 | 抽象类实现多个接口 | |
5 | 常见设计模式 | 模板设计 | 工厂设计,代理设计 |
6 | 对象 | 通过对象的多态性产生实例化对象 | |
7 | 局限 | 单继承 | 无 |
8 | 实际 | 做为模板 | 做为标准 |
9 | 选择 | 两者都可用时,优先使用接口,避免单继承 | |
10 | 特殊 | 一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类 |