您的位置:首页 > 编程语言 > Java开发

Java面向对象、抽象、封装、继承、多态

2017-11-28 15:07 806 查看


何为面向对象?

面向对象是一种编程思想,是一种程序设计模型。要深入理解面向对象的概念,首先你必须要明白,软件在现实世界中的职责所在。

我们都知道,软件的存在是为了让计算机直接模拟现实环境,在虚拟的世界中帮助人类解决问题,提高效率。在软件开发时,我们必须要面对一个问题,那就是如何将现实世界中的问题元素在软件中表示出来,我们将问题空间中的元素以及它们在方案空间的表示物称作“对象”(Object)。

面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位,将程序和数据封装其中,以提高程序的重用性,灵活性和可扩展性。类是创建对象的模板,一个类可以创建多个对象。对象是类的实例化。

抽象是什么概念?

我们上面提到,在使用面向对象程序设计模型时,涉及到类(class)的概念,所谓类,一般理解起来其实就是类别、归类的意思。在现实世界中,所谓类别和归类其实就是将某些具有相同属性、相同特征的事务归结到一起。

在面向对象编程中,抽象所指的就是对于要处理的客观对象,在系统中也构造相应的对象,提取其中需要关注的属性,而摒弃那些无关的属性,提炼对象的行为。

封装指的是啥?

所谓封装,指的是对象的实现方案的隐藏。其一是对对象属性的隐藏、其二是对对象行为的实现方案的隐藏。

要理解为什么要封装,首先我们必须要知道,从根本上说,大致有两方面的人会接触到面向对象编程:类的创建者和类的使用者。对类的使用者来说最主要的目标是知道某个类的某个方法能解决什么问题,然后通过调用这个类的具体方法快速解决需要解决的问题。而对类的创建者来说,他们的目标是从头到尾构建一个类,只向类的使用者提供一些接口,其他所有的实现细节都隐藏起来。为什么要这么做呢?主要有以下原因:

隐藏之后,类的使用者就不能接触和改变类的实现细节,所以原创者就不用担心自己的作品会收到非法篡改,可确保他们不会对其他人造成影响。

隐藏之后,允许类创建者修改内部结构而不影响类使用者的使用。例如,我们最开始可能设计了一个形式简单的类,以便简化开发。以后又决定进行改写,使其更快地运行。如果类的实现方案对类的使用者隐藏,类开发者对类进行优化之后,不会对类使用者造成什么影响。

继承有什么用?

想象这么一个场景:我们费尽心思做出一种数据类型后,假如不得不又新建一种类型,令其实现大致相同的功能,那会是一件非常令人灰心的事情。但若能利用现成的数据类型,对其进行“克隆”,再根据情况进行添加和修改,情况就显得理想多了。“继承”正是针对这个目标而设计的。

但继承并不完全等价于克隆。在继承过程中,若原始类(正式名称叫作基础类、超类或父类)发生了变化,修改过的“克隆”类(正式名称叫作继承类或者子类)也会反映出这种变化。在 Java 语言中,继承是通过 extends 关键字实现的。

继承划分了类的层次性,父类代表的是更一般、更泛化的类,而子类则是更为具体、更为细化;

继承是实现代码重用、扩展软件功能的重要手段,子类中与父类完全相同的属性和方法不必重写,只需写出新增或改写的内容,这就是说子类可以复用父类的内容,不必一切从零开始。

java只支持单一继承,多重继承要利用接口来实现。

多态如何体现?

所谓多态,其实所指的是同一属性或者方法的不同表现形式。对于面向对象而言,多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。

Java实现多态有三个必要条件:继承、重写、向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备既能调用父类的方法和子类的方法。

在Java中有两种形式可以实现多态:继承和接口。

基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。

基于继承实现的多态可以总结如下:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的统一接口来处理该层次的方法。

在接口的多态中,指向接口的引用必须是实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。

继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: