首先搞清楚抽象类和接口是什么?
他们之间有什么联系?
还有怎么区分它们?
最后适合他们各自的场景在哪里?
抽象类:
定义:
简单一句话就是被abstract修饰的类。
作用:
强制让子类必须重写抽象类的抽象方法(体现了一种约束和规范作用)
步骤:
- 抽象类不能创建对象,但是能被继承
- 继承子类继承的抽象类,必须要重写抽象方法
- 创建子类的对象,调用重写的抽象方法
特点:
- 抽象类不能创建对象
- 抽象类有构造方法,并且可以让构造方法给成员变量赋值
- 抽象方法必须放在抽象类中
- 子类必须重写抽象类中的所有抽象方法,如果只是重写抽象一部分,那还是一个抽象方法
接口:
定义:
接口是比抽象类更加纯粹的抽象。接口中只有抽象方法与常量(1.8之前)
作用:
相当于一些标准,支持多个接口
使用步骤:
- 创建类实现接口
- 重写接口的抽象方法
- 创建实现类的实现方法
特点:
1.接口中的抽象方法:可以省略public abstract
2.接口中的常量:可以全部或者部分省略public final static
3.类可以多接口实现
4.接口可以多继承接口 作用:(1)模块化 (2)提高复用性
抽象类和接口的联系:
- 都不能被实例化
- 都位于继承树的顶端,用于被其他类实现和继承
- 都可以含有抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法
抽象类和接口的区别:
在语法层面上:
1.类与类只单继承,类可以有多个接口,接口与几口可以多继承
2.抽象类的成员变量可以是各种类型,而接口只能public static final 变量
3.接口只包含抽象方法,静态方法和默认方法,抽象类则完全包含普通方法
4.抽象类可以提供成员方法实现细节,而接口只能存在public abstatic(1.8之后接口可以在默认方法里面实现)
5.抽象类的抽象方法的权限修饰符可以是public,protected,default类型,后者只能是public
在设计层面上:
1.抽象类是对事物整体进行抽象,接口却是对事物局部进行抽象
《继承是一个"是不是"的关系,接口是一个"有没有"的关系》
2.抽象类 ===》模板式设计 , 接口 ===》辐射式设计