封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象获得的数据和行为(或功能)相结合,造成一个有机的总体,也就是将数据与操做数据的源代码进行有机的结合,造成“类”,其中数据和函数都是类的成员。html
封装的目的是加强安全性和简化编程,使用者没必要了解具体的实现细节,而只是要经过外部接口,以特定的访问权限来使用类的成员。java
面向对象就是使用程序处理事情时以对象为中心去分析;与面向过程不一样,面向过程关心处理的逻辑、流程等问题,而不关心事件主体。而面向对象即面向主体,因此咱们在解决问题时应该先进行对象的封装(对象是封装类的实例,好比张三是人,人是一个封装类,张三只是对象中的一个实例、一个对象)。好比咱们平常生活中的小兔子、小绵羊均可以封装为一个类。编程
好比兔子的属性有两只耳朵、四只腿、一双眼睛、三瓣嘴等;行为(功能)有跑、跳、吃素等。
安全
继承是面向对象的基本特征之一,继承机制容许建立分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具备父类的实例域和方法,或子类从父类继承方法,使得子类具备父类相同的行为。相似下面这个图:
编程语言
咱们在上面已经封装了兔子这个类,其余动物也同样能够进行封装。在封装过程当中咱们发现兔子、绵羊这两个类具备类似的功能或特性如吃草,因此咱们能够抽取共有特征和方法造成高一层的类,如这里的食草动物、食肉动物。继承之间是子父类的关系。继承机制能够很好的描述一个类的生态,也提升了代码复用率,在Java中的Object类是全部类的超类,常称做上帝类。模块化
多态同一个行为具备多个不一样表现形式或形态的能力。是指一个类实例(对象)的相同方法在不一样情形有不一样表现形式。多态机制使具备不一样内部结构的对象能够共享相同的外部接口。这意味着,虽然针对不一样对象的具体操做不一样,但经过一个公共的类,它们(那些操做)能够经过相同的方式予以调用。函数
多态的优势:工具
多态存在的三个必要条件:oop
简言之,多态实际上是在继承的基础上的。好比说今天咱们要去动物园参观动物,那么你说咱们去参观兔子、参观绵羊、参观狮子、参观豹子都是对的,但你不能说咱们去参观汽车。在这个例子中,子类具备多态性:除了使用本身的身份,还能充当父类。设计
一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工做。
好比在职员类里,将工程师、销售人员、销售经理这些状况都放在职员类里考虑,其结果将会很是混乱,在这个假设下,职员类里的每一个方法都要if else判断是哪一种状况,从类结构上来讲将会十分臃肿。
对象或实体应该对扩展开放,对修改封闭。
更改封闭便是在咱们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或从新编译文件!这个原则对咱们在设计类的时候颇有帮助,坚持这个原则就必须尽可能考虑接口封装,抽象机制和多态技术!
在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用一样适用于子类)
高层次的模块不该该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。
能够这样理解,上面我举例子的时候先说了兔子和绵羊,而后才推出食草动物。但若是咱们继续认识了牛、马等食草动物,咱们会发现咱们须要不断调整食草动物的描述,这样程序会变得僵化,因此咱们不该该让子类依赖于实体,不该该让父类模块依赖于子类模块。因此咱们须要将食草动物设计为抽象类,即抽象类或接口。这样下层只须要实现相应的细节而不会影响父类。
不该强迫客户端实现一个它用不上的接口,或是说客户端不该该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!
好比,为了减小接口的定义,将许多相似的方法都放在一个接口中,最后会发现,维护和实现接口的时候花了太多精力,而接口所定义的操做至关于对客户端的一种承诺,这种承诺固然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!
这些基本原则须要咱们在使用面向对象编程中慢慢领会、总结。
一是用private把类的细节与外界隔离起来,从而实现数据项和方法的隐藏,而要访问这些数据项和方法惟一的途径就是经过类自己,类才有资格调用它所拥有的资源(方法,数据项属性等等)。第一个好处就是数据的安全性提升了。
二是经过隐藏隔离,只容许外部对类作有限的访问,开发者能够自由的改变类的内部实现,而无需修改使用该类的那些程序。只要那些在类外部就能被调用的方法保持其外部特征不变,内部代码就能够自由改变,各取所需,利于分工。提升了代码的可用性和可维护性
三就是提升了代码的重用性,封装成工具类之后可以减小不少繁琐的步骤。
抽象是把想法从具体的实例中分离出来的步骤,所以,要根据他们的功能而不是实现细节来建立类。Java支持建立只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。
抽象和封装是互补的概念。一方面,抽象关注对象的行为。另外一方面,封装关注对象行为的细节。通常是经过隐藏对象内部状态信息作到封装,所以,封装能够当作是用来提供抽象的一种策略。