java-面向对象-接口-抽象类

  1. 背景:最近接触netty以及自己写"包一层"的设计,包一层 是指在原生netty的api上再包一层api,称作项目common,因为项目是对接不同上游,所以才做的common,有了一些理解和想法
  2. 理解:为什么有时候既要有接口,又要有该接口的抽象类:接口的抽象性更强,适应变化性也更强,抽象类就多了一些成员变量,默认方法实现,模板方法等,这些都是不可变的,变化性不那么强.之所以两者都保留, 目的就像星爷电影里鳌拜的台词:我全都要.变化强的我要, 有默认代码的我也要,至于实际对接的时候用哪个,哪个合适用哪个,当接口都不合适的时候,可能就要在接口的地方做改动,增加接口/修改接口/合并接口等等.另外,在设计的时候,如果一个成员变量或者参数的类型,可以写成接口,也可以写成实现该接口的抽象类, 那就写成接口,前提是这个接口和抽象类是自己设计时自定义的.如果时API里的,比如Thread和Runnable,这就属于实际使用范畴了,哪个合适用哪个.如果是个线程,就可以不用Runnable,可以用一个抽象类继承Thread,然后用这个抽象类.
  3. 为什么要包一层:我感觉,好像是让开发简化底层框架的理解,或者说省去对底层逻辑的理解,就拿netty来说,理解底层的不多,那么就可以让少部分理解netty的人写一个"包一层"的代码,然后不理解netty的也可以使用了,就像spring一样.spring,我理解是工具+包一层,包的是拦截器/过滤器/aop/代理,工具是依赖注入,bean容器
  4. 关于一层一层的接口/抽象类,也就是接口之间的相互继承,抽象类之间的相互继承,抽象类实现接口,为什么:为了把功能点细化,为什么要细化:为了用起来方便.举个例子:杯子,有各种各样的,有偏男性的,有偏女性的,有无关性别的,材质有金属的,陶瓷的,竹子的木头的,有保温的,不保温的,插电加热的,插电制冷的,插电搅拌的,带吸管的,不带吸管的,带把儿的,不带把儿的,但在面向对象设计的时候,就需要先有一个杯子的接口,接口里必须要有接收倒水方法和拿起杯子和往外出水方法.然后再由抽象杯子:有属性:材质,是否可插电等等.代码中的实际例子就是java中的stream和reader/writer

你可能感兴趣的:(javaoop面向对象编程封装)