疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java基础抽象、封装、继承


 

   

  在java入门中,除了基本语法之外,另一个重点和难点就是抽象、封装、多态,他们是一些面向对象的基本思想,一定要征服它们,才能写出高效率的程序。下面来具体讲讲它们。

  抽象

  先来说一下抽象,抽象是什么?它是一种研究方法,即去掉被研究对象中与主旨礼物管的部分,或者是暂时不考虑的部分,仅仅去研究与工作有关的部分。举个例子,学CPU ,从主机上找到CPU ,抛弃硬盘,抛弃光驱……来专一研究CPU ,这就可以说成抽象。抽象有两种,一种叫过程抽象,另一种叫数据抽象。

  过程抽象,顾名思义,对过程采取抽象的方法来研究,它把整体划分为若干部分,强调的是完成的过程和步骤。面向过程的软件都是用这种方法去研究的,以此有利于控制程序,降低程序的复杂度。这是优点,缺点是太自由了,不好统一管理了,难于规范化和标准化,操作起来有一定难度在质量上也就没有保证了。

  数据抽象,和它正好不同,它专注的是数据,是结果。它是先观察需要研究的数据,根据他们的功能、性质和行为上的不同,来抽象出不同的数据类型。相对于前者,比较严格,也比较合理。面向对象的软件开发,就是用的这种方法来构建类、对象和方法。这样,程序员们可以专心的做自己的工作,不必去考虑其他东西。

  封装

  再来说一下封装,什么是封装?举个例子,家里的空调。买到家里面之前是一大堆零件。用户关心的是空调的用途,不会关心里面的东零件,所以,厂家会在空调出厂的时候把他们封装,装一个壳子(即外壳),只露出一个遥控器接收器和按键。这就是封装。

  用专业术语来说,封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护抽象数据类型的内部,系统的其他部分,只有通过包裹在数据外面的 被授权的操作,才能与这个数据类型交流和交互。它是建立在抽象数据类型基础之上的,它用“类”这种面向对象工具可理解和操作的结构来代表,每个类里面都有相关数据和操作。由于他们被严严实实地包裹,所以它们之间的耦合度大大减少,从而降低了开发过程的复杂度,提高了效率,同时也保证了质量。

  像使用空调一样,想让他工作,就必须通过唯一途径——遥控器,在程序里面,要想用某各类,就只能通过调用,其他方法不行。这里可以理解为功能明确,接口单一,可以在各种环境下独立工作的单元。

  多态

  最后一座大山——多态。说到多态,要先说一下继承。可以说,先有继承,后有多态。什么是继承?简单理解就是父与子的关系。继承说的是两个类的关系,当一个类获取另一个类中非私有的数据和操作来作为自己的一部分或全部成分时,他俩就有了继承关系。被继承的叫父类,另一个叫子类。说白了就是父与子的关系。

  一个父亲可以有多个孩子,这里也是,一个父类可以有多个子类。在这里,父类实际上就是所有子类的公共域和公共方法的集合,每一个子类就是父类的特殊化。举个例子:移动通信的套餐服务,把它当做父类的话,10块的套餐是一个子类,20块的是一个子类,以此类推。这两个套餐都有打电话功能,都有上网功能等等。如果这样想的话,继承的优点就出来了:程序结构清晰,降低代码的检查工作。

  在继承中,有一个关于单重继承和多重继承的概念。单重继承,指任何一个类都只有一个单一的父类,多重继承指一个类可以有多个父类,可以理解为一个家庭和重组家庭的区别,这样比较好记。但是必须要注意一点:子类不能直接继承父类的父类里面的东西。即孙子不能直接继承爷爷的东西。

  多态是由封装和继承引出来的面向对象的一个特征。在面向对象的时候,会经常遇到“重名”的现象,用“重名”来提高程序的抽象和简洁。这样就多出两个名词:覆盖和重载。有时候,通过覆盖来区分子类里面的和父类相同的东西,从而来保持子类的和父类不同的属于自己的特性,而重载,是在一个类中定义同名方法的情况。由于这些方法最终功能一样,但是在执行过程中可能会遇到不同情况。

  在多态里面的最后一个要注意的特性,我用一个例子来说一下。

  比如,公司里面有3个职位,职工(Employee)、管理者(Manager)、领导(Director),对他们分别抽象,形成3个类,他们之间的继承关系为:

  class Employee{……}

  class Manager extends Employee{……}

  class Director extends Director{……}

  分别 创建方法:

  Employee emp=new Employee(); //emp指向职工对象

  Employee emp=new Manager(); //emp指向管理者对象

  Employee emp=new Director(); //emp指向领导对象

  如果A是一名管理者(Manager类的对象),他可以被视为Employee的对象,这是子类作为父类的含义。

  对Employee类的emp,既可以表示本类的对象,也可以表示另外两个类的对象。但要注意:父类对象不能被当做子类的对象。例如 B是一名职工(Empoyee的对象),但是B不能被看做管理者(Manager类的对象),因为不是所有的职工都是管理者。在编译中,它是属于不兼容的类型的错误。

  这就是java的三座大山⇒抽象、封装和多态。

  希望没有准确理解它们的朋友们看完能有所收获。