面向对象思想

本文介绍了面向对象的基本思想,包括对象、类的概念,以及面向对象的三大特性——封装、继承和多态。封装通过隐藏内部细节提供接口来降低耦合度;继承允许子类继承父类属性和行为,实现代码复用;多态则提供了接口的多种形态,增强了程序的灵活性和可扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概述

面向对象是一种对现实世界理解和抽象的方法。万物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。

面向对象思想体现在软件开发中的各个方面。如, 面向对象的分析(OOA,Object Oriented Analysis),结合常用的设计原则、模式对关键的问题域进行分析和抽象。面向对象的设计(OOD,Object Oriented Design),对问题域的抽象建立产品的模型和结构;面向对象编程(OOP,Object Oriented Programming),依据产品的模型和机构进行编程。

2、几个概念

  • 对象,需要研究的一切事物。对象实现了状态和行为的封装。
  • 类,具有相同的属性(状态)和方法(行为)的对象的抽象就是类。对象的抽象是类,类的具体化就是对象。
  • 类的结构,类之间的结构关系通常有两种:
    • 一般–具体结构关系(继承关系) :“或” 关系,或者是 “is a” 关系;
    • 整体–部分结构关系(聚合关系):“与” 关系,或者是 “has a” 关系。

3、三大特性

(一)、封装
利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

封装的优点:

  • 良好的封装可以降低耦合、提高程序的可复用性和可维护性;
  • 封装特性可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

(二)、继承
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

继承描述的是 “is a” 的关系,如果有两个对象A和B,若可以描述为“A是B”,则可以表示A继承B,其中B是被继承者称之为父类或者超类,A是继承者称之为子类或者派生类。

继承的特点:

  • 子类拥有父类非 private 的属性、方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类。
  • 继承是一种强耦合关系(缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
  • 继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的(缺点)。
  • 父类变,子类就必须变(缺点)。

什么时候使用继承:
问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。

(三)、多态
多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

多态分为编译时多态和运行时多态:

  • 编译时多态是静态的,主要是指方法的重载;
  • 运行时多态是动态的,指程序中定义的对象引用所指向的具体类型在运行期间才确定

多态的优点:

  • 消除类型之间的耦合关系
  • 可替换性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

运行时多态有三个条件:

  • 继承

  • 覆盖(重写)

  • 向上转型

  • 多态的实现方式:

    • 接口:接口的引用指向该接口实现类的实例,在运行时,根据对象引用的实际类型来执行对应的方法。
    • 重写:个子类对父类同一方法的重写可以表现出不同的行为。
    • 抽象类和抽象方法:如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值