什么叫做类型?


  • 具有相同的特性(数据元素)和行为(功能)的对象构成的集合

  • 一个类就是一种数据类型,可以生成无数个对象(实例)

  • 程序员就是通过定义一系列的类来解决问题的



什么叫对象?


  • 对象具有状态、行为和标识(唯一的内存地址)

  • 程序就是对象的集合,对象之间通过发送消息(请求)互相合作

  • 每个对象都有接口(即方法)

  • 每个对象都是一个服务提供者

  • 编写一个程序就是创建一系列能够提供我们所期望的服务的对象(先在现有代码库中寻找这些对象是否已经存在),然后将这些对象组合起来,共同完成任务。

  • 一个对象不应承担过多的功能



为什么要进行访问控制?


  • 原因一: 让使用者无法触及他们不应该触及的部分,因为这些隐藏部分并不是用户解决问题所需的接口;这样做另一方面也让用户更容易看出哪些东西对他们来说是重要的,哪些东西可以忽略。

  • 原因二: 允许库设计者改变接口内部的实现方式而不用担心会影响到用户。

  • 访问指定词

     public:任何人都可以调用

     default:同一个包内可以访问

     protected:本类和继承的类可以访问

     private:只有类内部的方法可以访问



可复用性


  • what

直接使用类的对象或者用这个类来生成新的类,这个类作为新类的成员对象,通常被声明为private。这种方式叫”组合“:使用现有的类生成新的类,组合是一种”has-a(关系)“。


  • how

在建立新类时,应该优先考虑组合,而不是继承。



继承(inheritance)


  • why

当创建一个新类时,如果这个新类与现有类存在相似的功能,为了复用代码,通过继承可以减少很多编码工作。


  • what

   1)is-a关系

    继承只覆盖基类的方法

    继承类完全等于基类

   2)is-like-a关系

    继承类添加了新的方法

    基类无法访问继承类中新添加的方法


  • 特点

单根继承结构:所有的类最终都继承自单一的基类——Object类。


  • 相关概念

重写/覆盖(override)方法完全相同,只是实现不同

重载方法名相同,参数不同。不能以返回类型区分不同方法,因为调用某个方法时可能不需要返回任何值。



多态(polymorphism)


  • why

想把一个对象不当做它所属的特定类型来对待,而是当做其基类对象来对待。这样可以编写出不依赖于特定类型的代码,不管增加多少新类型,原本的代码都不受影响。


  • how

后期绑定/动态绑定直到运行时程序才确定被调用代码的地址。编译时只确保被调用方法的存在,但是并不知道被执行的确切代码。(补充:前期绑定/静态绑定 是指在运行前即编译时就已经确定了将要被执行的代码的地址)


  • 相关概念

向上转型(upcasting):从具体的类型转型为泛化的类型,如将子类看做它的基类,向上                                           转型一般是安全的。

向下转型(downcasting):从泛化的类型转型为更具体的类型,如将基类看做子类,向                                                  下转型一般是不安全的。


容器


why

  • 用来存储对象的容器


what

  • 其实容器也是一种java类型,如list/map/set

  • 里面存储的是对象的引用



参数化类型


why

在泛型出现之前,容器内存储的对象都是Object类型,所以容器可以存储任何对象。这样带来的问题是:将对象置入容器时,它必须被向上转型为Object类型,因此会丢失自身份。当把它取出时,就获取了一个对Object对象的引用,而不是置入时的那个类型的对象的引用。参数化类型的作用就是让置入对象在取出时还能保持其身份。


what

  • 编译器可以定制作用于特定类型上的类。如:编译器可以定制一个值接纳和取出Shape对象的容器。

  • 在java中,参数化类型称为范型,一对尖括号,中间包含类型信息。



对象的生命周期


why

每个对象都占有了资源,尤其是内存。当我们不需要一个对象时,应该释放它所占有的资源。


how

java垃圾回收器来负责清理工作。