概述:接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
1、抽象类与抽象方法
抽象方法:只有方法的定义,没有方法的主体的方法。用abstract标识。
例如:
抽象类:包含抽象方法的类。用abstract标识。
例如:
抽象类不能创建实例:原因抽象类中包含的抽象方法是没有任何意义的,交给子类实现抽象方法更具有意义。
抽象类存在的理由:有用的重构工具,因为它们使得我们可以很容易地将公用方法沿着继承层次结构向上移动。
2、接口
接口是抽象类的极致表现,里面只有抽象方法。用interface关键字标识。
2.1一个接口内容
常量和抽象方法。
接口里面的方法默认是public ,成员变量必须是static final修饰
2.2抽象类VS接口(面试题)
1)一个类可以有多个接口,只能继承一个抽象类;
2)抽象类可以有构造方法,接口中不能有构造方法;
3)抽象类可以有普通成员变量和普通方法,接口中只能是抽象方法和常量即变量的类型默认是public static final;
4)抽象类的抽象方法访问修饰符可以是public、protected,接口中抽象方法只能是public,若不写默认为public abstract;
5) 抽象类可以有静态方法,接口中没有;
3、涉及到的设计模式
为了实现完全解耦,可以通常用于设计默认,与策略模式是常见的搭配。
3.1策略模式
情景:
创建一个能够根据所传递的参数对象的不同,而具有不同的行为 的方法。
好处:可以动态的改变对象的行为。
设计原则:将一个类中经常改变或可能改变的部分提取出来,作为一个接口;将不同行为的该接口的实例对象作为实参;
涉及对象:环境对象、抽象策略对象、具体策略对象
3.2适配器模式
适用场景:- 系统需要使用现有的类,而这些类的接口不符合系统的接口。
- 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
- 两个类所做的事情相同或相似,但是具有不同接口的时候。
- 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
- 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
角色:目标接口(Target):客户所期待的接口。可以是接口,类或抽象类。
需要适配的类(Adaptee):需要适配的类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换为目标接口。
3.3工厂方法设计模式
4、接口细节
4.1一个类可以实现多个接口
4.2可以通过继承来扩展接口,一个接口可以继承多个接口;
4.3接口中成员只能是抽象方法和static final的常量,常量可以用接口名.常量名调用;
细节:实现多个接口时候,出现的不同接口方法名相同的问题,会出现覆盖与重载:
5、嵌套接口
接口可以嵌套在类或者其他接口中。