文章目录
  1. 1. 接口和抽象类
    1. 1.1. 接口的意义:
    2. 1.2. 抽象类的意义:
    3. 1.3. 接口和抽象类对比
  2. 2. 附加知识点:
    1. 2.1. 抽象:就是抽去像的部分
    2. 2.2. 开闭原则:

接口和抽象类

接口的意义:

- 规范

    接口是用来规范类的,它可以避免类在设计上的不一致,这在多人合作的开发中犹为重要;

    它是一种标准,每一个实现它的类都要遵守这个接口定义的规则,标准。

- 扩展(解耦)

    最大程度的解耦,方便以后项目扩展 

        Eg:OOP的思想,底层定义了规范,上层来负责实现,打个比方说,jdbc中就是定义了数据库操作的接口,然后不同的数据

        库服务厂商实现不同的数据库操作。

- 回调(参见下一篇文章)

抽象类的意义:

- 为其子类提供一个公共的类型;

- 封装子类中的重复内容;

- 定义了抽象方法,子类虽然有不同的实现,但定义是一致的。抽象类设计出来就是为了继承,实现多态。

接口和抽象类对比

  • 接口用来定义两个对象间通信的契约;

    抽象类用来封装对象间公用的行为;

  • 接口适合为不相关的类提供通用功能;

    抽象类主要应用于关系密切的对象间;

  • 实际编程中:

    1. 我们关心do what,但不关心 how to do,我们可以用接口;

      我们既关心 what,又关心 how时,选用抽象类,但对象间对于某个what 时,how 却表现各异;当然,另一个what,

      又how的一致;

    2. 将来想加个通用方法,抽象类中直接添加即可,继承的subClass无需任何更改;【模板式设计】接口如果添加,那所

      有实现的类都需更改;【辐射式设计】

    3. 我们可能现有一堆类,后面才慢慢抽象出类的共同的方法,更多是重构产生的【自下而上】;接口是一开始就定义好

      的一些规范【自上而下】

    4. 从继承角度来讲,如果类已经继承了一个父类,那此时就应该把这部分功能定义接口,实现多个接口是没有问题的,

      但只能单继承;(java中)

    5. 扩展功能:将来某些具体类想扩展一项功能,如果直接在抽象类中添加该功能,那继承了该抽象类的另外一些具体类

      是不想要这些功能的,由于继承,却也给这些类这个功能;

      如果使用接口定义,哪些类想扩展功能,哪些类就实现接口即可;

      好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。(如果一个类只是实现了这个接口的

      中一个功能,而不得不去实现接口中的其他方法,就叫接口污染)

      Eg:java中的 比较接口

    6. 对一类事物进行抽象用抽象类,对行为进行抽象时用接口。

    7. java8中接口中方法可以有方法体,前提是 方法是 static;

接口中 :

变量默认是 public static final

方法默认是 public abstract

注:默认可以省略,但不能改变;具体看代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
*
* 接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,
* 也就是常量了。
*/
interface TestIntf{
public static final int a =2;
public abstract void getName();
}
//这两段代码一致,我们平时为书写方便,多书写下面(懒,习惯少写)
interface TestIntf{
int a =2;
void getName();
}

附加知识点:

抽象:就是抽去像的部分

开闭原则:

对修改关闭,对扩展开放;

通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层

次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

文章目录
  1. 1. 接口和抽象类
    1. 1.1. 接口的意义:
    2. 1.2. 抽象类的意义:
    3. 1.3. 接口和抽象类对比
  2. 2. 附加知识点:
    1. 2.1. 抽象:就是抽去像的部分
    2. 2.2. 开闭原则: