欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面向过程与面向对象及面向对象三大特性

程序员文章站 2022-03-25 22:52:46
######################################################### 今天复习一下面向对象的特性以及与面向过程的区别,并对其中的一些细节内容进行回顾!!! ################################################# ......

#########################################################

今天复习一下面向对象的特性以及与面向过程的区别,并对其中的一些细节内容进行回顾!!!

#########################################################

一、面向过程与面向对象的区别?

面向过程:是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程中数据和对数据的操作是分离的。

  1)优点:性能比面向对象高,因为在类调用是需要实例化,开销比较大,比较消耗资源。

  2)缺点:没有面向对象易维护、易复用、易扩展。

面向对象:是将事物对象化,通过对象通信来解决问题。面向对象编程中数据和对数据的操作是在一起的。

  1)优点:由于面向对象有继承、封装、多态的特性,可以设计出低耦合的系统,使系统更更灵活,更易于维护。

  2)缺点:性能比面向过程低。

二、面向对象三大特性:继承、封装、多态

  1.继承:子类继承父类非私有的属性和方法,子类可以添加自己的属性和方法,子类可以重新定义父类的方法。

    1)注意:java中是单继承,即一个子类只能继承一个父类;java中object类是所有类的直接或间接父类;每一个子类被实现按时(new),父类会在它之前实现(被new)。

        构造函数不能被继承,子类可以通过super()显式调用父类的构造函数;创建子类时,默认调用父类的无参构造函数;如果父类没有定义无参构造函数,子类必须在构造函数的第一行使用 super()显式调用(先父后子)。

    2)为什么需要继承呢?

      第一,代码复用;第二,父类的引用变量可以指向子类对象。

  2.封装:即隐藏对象的属性和实现方法,仅对外提供公共的访问方法。

    1)为什么需要封装呢?

      封装符合面向对象设计的单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,它们只调用开放的接口,而不用去关心内部的实现。

    2)实现:将属性私有化;仅提供公开的方法(一个负责获取内容(get),一个负责修改内容(put))访问私有属性。

    3)优点:提升了代码的安全性和隐私性;能减少耦合;类内部的结构可以*修改;

  3.多态:一个对象在不同时刻体现出来的不同状态(一对多的关系)(父类引用子类对象)

    1)实现:

       重写:子类重写父类方法的实现,它是一种垂直层次关系。

       重载:指一个类中,存在方法名相同,但参数(个数、顺序、类型)不同的方法,它是一种水平层次关系。

    2)重写和重载的区别?

      重写是一种垂直关系,它是子类重写父类的方法,要求结构相同;而重载是一种水平关系,它是类内部书写多个相同名称的方法,它们通过形参列表来区分。

    3)在形参声明过程中,一般会声明的范围比较大,就可以传递父类也可以传递子类,代码的通用性就比较强。

    4)多态可以分为两种类型:编译时多态(方法的重载)和运行时多态(方法的重写)。

      运行时多态依赖于继承、重写和向上转型,向上转型是自动的,father f = new children(),不需要强转;向下转型需要强转,即children c =(children) new father()。 

    5)java中重写的两同两小一大规则:

        a. 方法名相同、参数列表相同;

        b. 子类方法返回类型<=父类方法返回类型

        c. 子类方法抛出异常<=父类方法抛出异常

        d. 子类方法访问权限>=父类方法访问权限

      声明为final和static的方法不能被重写;如果一个方法不能被继承,则不能被重写。