首页 > 其他分享 >面向对象的三个基本特征:封装、继承、多态

面向对象的三个基本特征:封装、继承、多态

时间:2023-10-06 23:22:06浏览次数:28  
标签:封装 继承 子类 多态 Dog 面向对象 父类 方法

封装

在面向对象编程中,封装是一种将数据和相关操作封装在一个单元内部的概念。它通过将数据和方法组合在一个类中,隐藏了内部实现的细节,只暴露了必要的接口给外部使用。

封装的目的是保护数据的完整性和安全性,同时提供一个清晰的接口供其他对象进行交互。通过封装,我们可以实现数据的隐藏和保护,防止外部对象直接访问和修改内部数据,只能通过类的公共方法来进行操作。

在面向对象编程中,封装可以通过以下方式实现:

1. 使用访问修饰符:在类中使用不同的访问修饰符(如public、private、protected)来限制成员的访问权限。私有成员只能在类内部访问,公共成员可以在类的外部访问。
2. 提供公共方法:通过公共方法来访问和修改私有成员变量。这些方法被称为getter和setter方法,用于获取和设置私有成员的值。
3. 数据隐藏:将数据成员声明为私有,并通过公共方法来访问和修改数据。这样可以隐藏数据的实现细节,只暴露必要的接口给外部使用。

封装有助于提高代码的可维护性和重用性,同时减少了对内部实现的依赖。它也有助于保护数据的一致性和安全性,避免了不必要的错误和意外修改。

继承

继承是面向对象编程中的一个重要概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承可以帮助我们重用现有的代码,并且可以通过添加新的功能或修改现有功能来扩展类。

在继承关系中,子类会继承父类的所有非私有成员,包括字段、方法和属性。子类可以直接访问这些继承来的成员,并且可以在需要的情况下进行重写或覆盖。

继承的语法通常使用关键字"extends"来表示子类继承父类。例如,下面是一个简单的Java代码示例:

在上面的示例中,Animal类是父类,Dog类是子类。Dog类继承了Animal类的属性和方法,包括构造函数和eat()方法。Dog类还定义了自己的方法bark()。在Main类的main()方法中,我们创建了一个Dog对象,并调用了继承来的eat()方法和自己定义的bark()方法。

继承还可以形成多层次的继承关系,即一个类可以继承另一个类的子类。这种继承关系可以形成一个继承树,其中最顶层的类称为根类或基类。在多层次继承中,子类可以继承所有祖先类的属性和方法。

需要注意的是,继承并不是适用于所有情况的最佳解决方案。在某些情况下,使用组合或接口实现可能更合适。此外,滥用继承可能导致继承层次过深或过于复杂,增加代码的复杂性和维护难度。因此,在设计类的时候,需要谨慎考虑

多态

多态是面向对象编程中的一个重要概念,它允许一个对象在不同的上下文中表现出不同的行为。多态性可以提高代码的灵活性和可扩展性。

多态性基于继承和方法重写的特性实现。当一个类继承自另一个类,并重写了父类的方法时,可以使用父类的引用来引用子类的对象,从而实现多态性。

多态性可以分为编译时多态和运行时多态。

1. 编译时多态:也称为静态多态,是指在编译时期就能确定方法的调用。它通过方法重载来实现,即同一个类中有多个同名方法,但参数类型或个数不同。编译器在编译时根据方法的参数类型和个数来决定调用哪个方法。

2. 运行时多态:也称为动态多态,是指在运行时期根据对象的实际类型来确定方法的调用。它通过方法重写来实现,即子类重写了父类的方法。在运行时,根据对象的实际类型来调用相应的重写方法。

下面是一个简单的Java代码示例,演示了多态的使用:

 

在上面的示例中,Animal类是父类,Dog类和Cat类是子类。它们都重写了父类的makeSound()方法。在Main类的main()方法中,我们创建了一个Animal类型的引用变量animal1,它引用了一个Dog对象;还创建了一个Animal类型的引用变量animal2,它引用了一个Cat对象。然后,我们调用了这两个引用变量的makeSound()方法。由于animal1引用的是Dog对象,所以调用的是Dog类的makeSound()方法;而animal2引用的是Cat对象,所以调用的是Cat类的makeSound()方法。

通过多态性,我们可以在不修改原有代码的情况下,通过替换对象的实际类型来改变方法的行为。这样可以提高代码的灵活性和可扩展性。

 

标签:封装,继承,子类,多态,Dog,面向对象,父类,方法
From: https://www.cnblogs.com/lang-ge/p/17745269.html

相关文章

  • 十四天学会C++之第四天(面向对象编程基础)
    类和对象是什么?在C++中,类是一种用户定义的数据类型,它可以包含数据成员(也就是属性)和成员函数(也就是方法)。类是一种模板或蓝图,用于创建具体的对象。对象是类的实例,它是根据类的定义创建的,可以用来表示现实世界中的各种事物。对象具有类定义的属性和行为。面向对象编程思想面向对象编......
  • Redis学习之缓存雪崩、缓存击穿及封装Redis工具类
    缓存雪崩缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。解决思路:1.不让key同时失效2.尽量不让Redis宕机具体解决方案:缓存击穿又叫热点key失效:两种解决方案:1.互斥锁:只有一个线程会负责缓存重建,其余线程拿不到锁,就......
  • 类和面向对象
    一、什么是类        类(Class)是面向对象程序设计(OOP,Object-OrientedProgramming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。        类的实质是一种引用数据类型,类......
  • Java---多态
    1.多态的概念1.1概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。2.多态的定义及实现2.1多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。那么在继承中要构成多态还有两个条件:必......
  • Learning Hard C# 学习笔记: 5.C#中的面向对象编程
    目前除C#外流行的面向对象编程的几个语言分别是:Java,C++等;面向对象的语言都具有以下特征:封装-将客观事物封装成类,并将类内部的实现隐藏,以保证数据的完整性;继承-子类通过继承可以复用父类的代码;多态-允许将子对象赋值给父对象的一种能力.5.1封装封装指的是......
  • java面向对象
    一面向对象和面向过程面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分面向过程(算法+数据结构=程序)规模比较小的问题,分解为过程的开发方式比较理想面向功能划分软件结构以方法为单位面向对象(数据在第一位,再考虑......
  • java基础-面向对象
    1面向对象之类与对象#类: 是抽象的概念,笼统的,不具体的人类狗类鸟类#对象: 对象又叫实体,类的具体表现人类中:厨师,学生,老师狗类:小狗1号,小黑狗#每个人对象都会有:姓名,性别,年龄,不同对象,属性又不一样#每个人的对象都会有方法:说话,走路1.1类的定义规......
  • 头歌(educoder)第 6 章 Java面向对象之常用类
    头歌(educoder)第6章Java面向对象之常用类目录Java面向对象-常用类(初级)第1关String类第2关:StringBuffer类第3关:Math类第4关Random类第5关:知识回顾Java面向对象-String类第1关length()方法与compareTo()方法的使用-花名册第2关substring()......
  • 通过工厂函数封装返回app对象
    main.py#主文件importosfromappimportcreate_app#通过环境变量设置项目运行时使用的配置文件,这里就手动设置以下了,一般部署的时候通过脚本等设置。#os.environ.setdefault("APP_ENV","dev")app=create_app(os.environ.get("APP_ENV","dev"))@app.route('......
  • 什么是面向对象?
    目录什么是面向过程?什么是面向对象?面向对象的主要特征一.封装性二.继承性三.多态性Java语言最大的特点在于面向对象的编程设计。Java也是从面向过程逐渐传向面向对象。上一节我们脑海中已经有了对象的概念,这节课我们来从以下几个方面全方位修习面向对象这一部分。(这节属于八股文......