Chapter01 对象入门

对象

什么是对象

代码角度:从概念上将各式各样的数据和功能封装到了一起
体系角度:物化

发消息/发请求

向目标对象发消息发请求:就是调用目标对象的目标方法,例如向Light类型(灯类型)的对象lt(灯对象)发送开灯消息:lt.on()

Light lt = new Light();
lt.on(); // 向lt对象发送开灯消息:发消息或发请求

实现方案的隐藏

  • 类创建者:目标是从头构建一个类,只向类使用者开放必要开发的接口,其他所有细节都隐藏起来;隐藏之后,类使用者就不能修改那些隐藏的细节!这里的隐藏是从代码层面使用访问权限关键字public、protected、private、default来修饰成员变量与成员方法,当类编译成字节码文件后,类使用者当然只能使用类创建者提供的公共的接口
  • 类使用者:使用别人开发好的类(字节码class文件或源代码,如果是源代码当然可以修改了),不必关系该类的实现细节
  • 接口:接口Interface规定了可对一个特定的对象发出哪些请求,所以必须在某些地方存在着一些代码以满足这些请求,在代码层面上其实就是public的方法,即类对外提供的公共接口
  • 隐藏实现:类对外提供的公共接口+隐藏起来的数据。类使用者只需要知道类提供的公共接口能够完成什么功能即可,不需要知道该接口里面是怎么实现的:实现手段就是访问控制
  • 访问控制
  1. 内部数据类型的设计思想:防止程序员接触他们不该接触的东西
  2. 也许类创建者修改类的内部结构,而不必担心这些修改会对已有的程序造成什么影响:例如将类的内部结构进行修改,用到该类的地方都要跟着修改,那就是一场灾难!将接口与实现进行分离,接口不变,实现改变,已有的程序只需要重新链接一下即可,不需要进行代码的修改

类的重复使用

  1. 直接使用类创建对象:那么对这个类要求很高,要求类创建者具有较多的经验与洞察力
  2. 继承:本质就是对已有类的扩展extends,子对象中包含了一个父对象
  3. 组合:将一个类的对象置于新类。灵活性强:将新类的成员对象设置为private,那么使用该类的客户程序员就不能访问他们,那么可以在不干扰客户代码的前提下,从容的修改那些成员对象,甚至可以在运行时动态的改变这些成员对象。这种灵活性是继承不具备的(因为编译器必须对通过继承创建的类加以限制)

继承:等价与类似

  1. 目标:利用现成的数据类型,对其进行克隆,再根据情况进行添加和修改,得到新的数据类型(继承并不是完全等于克隆
  2. 父类
  3. 子类
  4. 实现:通过extends关键字实现的,子类中包含了父类所有的成员(尽管父类的private成员被父类隐藏起来了且不能访问,但的确被子类继承下来了,只是不能访问而已)。更为重要的是子类复制了父类的接口:可以像父类对象发送的消息同样可以发送给子类对象
  5. 接口:这里的接口可以理解为父类的public的方法,以供外部调用

等价关系

is-a:子类继承父类,子类与父类具有完全相同的接口(public的方法),子类并没有新添自己的方法。在这种情况下,可以理想的将子类对象替换成父类对象

类似关系

is-like-a:子类继承父类,子类与父类具有完全相同的接口(public的方法),子类新添自己的方法,即新类型拥有了旧类型的接口,但还包含了其他方法,所以他们不是完全等价的。

发布了13 篇原创文章 · 获赞 2 · 访问量 306

猜你喜欢

转载自blog.csdn.net/MOOG007/article/details/104626037