封装、继承、多态--java

 

0.绪论  html

  面向对象的三大特性是封装、继承和多态。本文将以java为例简单阐述一下这三个概念。java

  首先说明一下,在java中,对象是指一个java类的一个实例。java类中的成员包括数据成员和方法成员,其中数据成员又被称为属性,方法成员简称为方法。安全

 

1.封装htm

  1.1 概念:封装是指把对象(即java类)的属性和方法结合成一个独立的总体,隐藏实现细节,并提供对外访问的接口(接口是指外部可访问的数据成员和方法成员)。对象

  1.2 优势/产生缘由blog

  (1)安全性:类使用者只能经过暴露的接口去使用该类的实例,避免了类使用者对该类对象的不当操做(eg.使用者不当心修改了对象的某个私有数据成员,致使在调用该对象某个方法时结果与预想结果不一致);继承

  (2)灵活性:在保证暴露的接口不变的状况下,类建立者能够任意修改被隐藏的部分,而不用担忧对类使用者形成影响。接口

  1.3 在java中如何实现封装开发

  封装的实质是访问控制,其目的是控制类使用者对类中成员(包括数据成员和方法成员)的访问权限。在java中,java开发者使用publicprivateprotected三个关键字来声明访问控制。其中,public关键字表示紧随其后的元素对任何人均可用;private关键字表示除类型建立者和类型的内部方法以外的任何人都不能访问;protected关键字表示除类型建立者、类型的内部方法和继承类(即子类)外的任何人都不能访问。get

  在没有使用这三个关键字的情形下,java默认的访问权限是包访问权限,即某个类的成员能够被与该类处在同一个包中的其余类访问。(包,就是文件目录或者文件夹的意思。)

  总结:java开发者经过publicprivateprotected三个关键字来声明访问控制,若是没有就采用java提供的默认访问权限(即包访问权限),而后java编译器或者虚拟机负责解析publicprivateprotected关键字并实现访问控制功能,从而实现封装。

  注意点:public、private和protected是java中的访问限制词,不只能够用于修饰数据成员、方法成员,能够用于修饰class、interface等。

 

2.继承

  2.1 概念:继承是指在已有类的基础经过修改或者添加其数据成员、方法成员造成一个新的类。

  继承的层次如图2.1所示,箭头表示导出类继承了基类。已有类被称为基类或者父类,造成的新类称为导出类,也称子类

 

图2.1 继承层次UML图

  2.2 子类和基类可能的组合形式:

  (1)子类和基类彻底一致;(这种形式比较少见,与基类彻底一致的子类毫无心义。)

  (2)子类和基类对外提供的接口彻底相同,但子类重写(overriding,又称覆盖)了基类的某些方法;(关于重写请阅读方法重载和重写--java

  (3)子类在基类对外提供的接口之上新添加了接口(多是重载了基类方法,也多是新添加了方法和数据成员);(关于重载请阅读方法重载和重写--java

  (4)子类既新添加了接口,又重写了基类的某些方法((2)和(3)的综合);

   总结:子类能够经过方法重写或新添加接口两种方式来使得自身与基类不一样。

  2.3 优势/产生缘由:代码复用(能够经过复用基类代码建立一个与基类相似的类)

  2.4 在java中如何实现继承:java开发者经过extends关键字声明继承关系,而后java编译器或者虚拟机负责解析extends关键字并实现继承功能。

  2.5 注意点:

  (1)经过继承,子类对象既能够看做是子类类型,也能够看做是基类类型。可是,基类对象则只能是基类类型(除非子类与基类彻底同样);

  (2)java语言采用单根继承机构,即java中全部的类最终都继承自单一的基类(Object类);

  (3)一个类只能经过extends关键字声明一个基类。当没有显示声明时,该类的直接基类是Object类,即一个类只有一个直接基类;

  (4)java中继承关系是能够传递的,即:若是A是B的子类且B是C的子类,那么A也是C的子类。

 

3.多态 

  3.1 产生缘由:多态与继承密不可分,本文2.2中提到在继承中子类与基类产生差别的方法包括重写基类方法和新添加接口两种方式,新添加接口的方式很天然地扩展了基类。可是,当子类重写了基类方法后,带来了这样一个问题:因为继承以后子类对象也能够看做是基类类型,对于一个声明为基类类型的子类对象,在调用该对象的重写方法时咱们每每指望运行重写后的方法,而不是基类中的方法。可是在java编译器看来,该对象是基类类型,所以执行基类中的方法是毋庸置疑的。那么,如何使得在调用该对象的重写方法时达到咱们指望的效果呢?多态能够帮助咱们达到这个效果,这也就是多态产生的缘由和意义。

  3.2 概念:多态,又称为后期绑定,是指当向对象发送消息时,被调用的代码直到运行时才肯定。通俗一点说,多态就是指当一个方法的返回值类型、方法名和参数(参数个数、参数类型和参数顺序)相同时,针对不一样的对象调用该方法时执行对应类中的实现版本。

  3.3 在java中如何实现多态:由java虚拟机提供支持,不须要开发者考虑

 

4.总结

  封装须要java开发者经过public、protected、private关键字实现(若是没有这些关键字,就由java默认的包访问权限实现),继承须要java开发者经过extends实现,而多态无需开发者作任何操做,是java虚拟机提供的机制,用于支持继承中的方法重写能正确运行。

  特别注意:多态是依赖于继承存在的,若是不须要继承,就不须要多态。更具体地讲,若是不须要继承中的方法重写,就不须要多态。

相关文章
相关标签/搜索