【面试】面向对象编程的三大概念(实例辅助记忆)

【面试】面向对象编程的三大概念(实例辅助记忆)

在这里插入图片描述

虑面向对象编程的三大特性,它们是:

  1. 封装(Encapsulation): 将对象的状态和行为封装在一起,对外部隐藏对象的内部实现细节。这样可以防止外部直接访问对象的内部数据,通过对象的方法来控制和操作数据。
  1. 继承(Inheritance): 允许一个类(子类)继承另一个类(父类)的属性和方法。这样可以通过在子类中重用父类的代码,减少代码的重复性,并实现代码的扩展和维护。
  1. 多态(Polymorphism): 允许使用同一操作符或方法调用来操作不同的数据类型,提高代码的灵活性。多态包括编译时多态(方法重载)和运行时多态(方法重写)。

封装

封装是面向对象编程中的一个概念,它指的是将一个对象的状态(数据)和行为(方法)捆绑在一起,形成一个独立的、封闭的单元。这样,对象的内部实现细节对外部是隐藏的,只有通过对象提供的公共接口(方法)才能访问和操作对象的状态。

封装有助于保护对象的内部状态,防止外部直接访问和修改,从而提高了代码的安全性和可维护性。同时,封装还提供了一个清晰的接口,使得对象的使用者无需了解对象的具体实现细节,只需通过公共接口进行操作。

下面是一个简单的Java示例,展示了封装的概念:

public class Person {// 封装的状态(私有属性)private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 封装的行为(公共方法)public String getName() {return name;}public void setName(String name) {// 在设置姓名时可以加入一些验证逻辑if (name != null && !name.isEmpty()) {this.name = name;} else {System.out.println("姓名不能为空");}}public int getAge() {return age;}public void setAge(int age) {// 在设置年龄时可以加入一些验证逻辑if (age >= 0 && age <= 150) {this.age = age;} else {System.out.println("年龄无效");}}
}

在这个例子中,Person 类封装了两个私有属性 nameage,并提供了公共的访问和修改方法 getName()setName()getAge()setAge()。外部代码不能直接访问 nameage,而是通过这些公共方法来操作对象的状态。这样,Person 类就实现了封装。

继承

继承是面向对象编程的三大特性之一,它允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法。子类可以重用父类的代码,同时可以根据需要添加新的属性和方法,实现代码的重用和扩展。

下面是一个简单的Java示例,演示了继承的基本概念:

// 父类 Animal
class Animal {// 父类属性protected String name;// 父类构造方法public Animal(String name) {this.name = name;}// 父类方法public void eat() {System.out.println(name + " is eating.");}
}// 子类 Dog 继承自 Animal
class Dog extends Animal {// 子类新增属性private String breed;// 子类构造方法,通过 super 调用父类的构造方法public Dog(String name, String breed) {super(name);this.breed = breed;}// 子类重写父类方法@Overridepublic void eat() {System.out.println(name + " the " + breed + " is eating.");}// 子类新增方法public void bark() {System.out.println(name + " is barking.");}
}public class TestInheritance {public static void main(String[] args) {// 创建子类对象Dog myDog = new Dog("Buddy", "Golden Retriever");// 调用继承自父类的方法myDog.eat(); // 输出:Buddy the Golden Retriever is eating.// 调用子类新增的方法myDog.bark(); // 输出:Buddy is barking.}
}

在这个例子中,Animal 是父类,Dog 是子类。子类通过 extends 关键字继承了父类的属性和方法。子类还可以新增属性和方法。在TestInheritance 类中,创建了一个 Dog 对象,通过该对象可以调用继承自父类的 eat 方法,以及子类新增的 bark 方法。

继承提供了代码的重用性和扩展性,使得我们可以更好地组织和管理代码。但需要注意,过度的继承可能导致代码的复杂性和耦合性增加,因此需要谨慎使用。

多态

多态是面向对象编程的三大特性之一,它允许不同类的对象对相同的消息做出不同的响应。多态提高了代码的灵活性和可扩展性。

在Java中,多态通过方法的重写(Override)和接口(Interface)的实现来实现。下面是一个简单的例子,通过继承和方法重写演示多态:

// 基类 Animal
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}// 派生类 Dog
class Dog extends Animal {// 重写基类的 makeSound 方法@Overridepublic void makeSound() {System.out.println("Dog barks");}
}// 派生类 Cat
class Cat extends Animal {// 重写基类的 makeSound 方法@Overridepublic void makeSound() {System.out.println("Cat meows");}
}public class TestPolymorphism {public static void main(String[] args) {// 使用基类的引用指向派生类的对象Animal myDog = new Dog();Animal myCat = new Cat();// 调用 makeSound 方法,实际调用的是派生类中的重写方法myDog.makeSound(); // 输出:Dog barksmyCat.makeSound(); // 输出:Cat meows}
}

在这个例子中,Animal 是基类,DogCat 是派生类。基类中有一个 makeSound 方法,而派生类分别重写了这个方法。在 TestPolymorphism 类的 main 方法中,使用基类的引用分别指向 DogCat 对象。尽管引用类型是 Animal,但在运行时,实际调用的是派生类中的重写方法,产生了多态的效果。

这样,通过多态,我们可以使用基类的引用来引用不同派生类的对象,并且在运行时动态地选择调用哪个类的方法。这提高了代码的灵活性,使得我们能够轻松地扩展和修改代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Power Automate删除SharePoint Online或OneDrive for Business文件版本历史

SharePoint Online和OneDrive for Business支持版本控制&#xff0c;可以保留文件的版本历史&#xff0c;方便用户随时查看和恢复以前的版本。但该功能也会占用大量SharePoint Online或OneDrive for Business存储空间。官方删除版本历史的方法无法批量操作&#xff0c;故今天提…

音效出众设计时尚,内置AI功能,sanag塞那Z50上手

现在蓝牙耳机已经成为人们生活中不可或缺的一部分了&#xff0c;像是在上班、坐车的时候&#xff0c;既可以享受自己的音乐空间&#xff0c;又不会吵到别人&#xff0c;看书、做题还是运动的时候&#xff0c;也可以保证长时间使用耳朵卫生、舒适度。正因为庞大的市场需求&#…

高压继电器,未来几年市场将保持稳定增长

高压继电器是一种用于控制大功率电气设备的开关装置&#xff0c;广泛应用于电力系统、轨道交通、工业自动化等领域。随着各行业对电气控制需求的不断增加&#xff0c;高压继电器市场也在不断扩大。全球高压继电器市场分析&#xff1a; 在全球市场中&#xff0c;目前主要的高压继…

理解 RPC 与 Protobuf:完整指南

一、Protobuf 数据格式简析 Protobuf 是什么&#xff1f; 在数据密集型应用领域&#xff0c;Google 开发的 Protobuf 作为一种高效数据编码方式而广受欢迎。它胜任于 JSON 及 XML 对比&#xff0c;不仅在体积和速度上表现出色&#xff0c;而且其结构化方式优化了网络传输中的…

二叉树的层序遍历,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 方法分析&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 代码补充说明&#xff1a; 题目地址&#xff1a; 102. 二叉树的层序遍历 - 力扣&…

WEB:探索开源OFD.js技术应用

1、简述 OFD.js 是一个由开源社区维护的 JavaScript 库&#xff0c;专注于在浏览器中渲染和处理 OFD 文件。OFD 作为一种开放式的文档格式&#xff0c;被广泛应用于电子政务、电子合同等领域。OFD.js 的出现为开发者提供了一个强大的工具&#xff0c;使得在前端实现 OFD 文件的…

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88682033 目录 【Matlab】BP 神经网络时序预测算法 【Matlab】CNN卷积神经网络时序预测算法 【Matlab】ELM极限学习机时序预测算法 【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测 【Mat…

【力扣100】【好题】79.单词搜索

添加链接描述 class Solution(object):# 定义上下左右四个行走方向directs [(0, 1), (0, -1), (1, 0), (-1, 0)]def exist(self, board, word):""":type board: List[List[str]]:type word: str:rtype: bool"""m len(board)if m 0:return Fa…

Docker安装Flarum(开源论坛)

Flarum介绍安装命令 #---------------------------------------------------------- mkdir -p /opt/flarum && cd /opt/flarum #---------------------------------------------------------- docker run -p 8888:8888 --name flarum \ --restartalways \ -v /opt/flar…

2 Windows网络编程

1 基础概念 1.1 socket概念 Socket 的原意是“插座”&#xff0c;在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种方式。Socket本质上是一个抽象层&#xff0c;它是一组用于网络通信的API&#xff0c;包括了一系列…

resetlogs失败故障恢复-ORA-01555---惜分飞

客户数据库resetlogs报错 Tue Dec 19 15:21:23 2023 ALTER DATABASE MOUNT Successful mount of redo thread 1, with mount id 1683789043 Database mounted in Exclusive Mode Lost write protection disabled Completed: ALTER DATABASE MOUNT Tue Dec 19 15:22:01 2023…

Vivado JESD204B与AD9162建立通信实战总结

一、FPGA与AD9162的JESD204B接口 FPGA作为JESD204B接口的发送端&#xff0c;AD9162作为JESD204B接口的接收端。FPGA和AD9162的device clk、SYSREF由同源时钟芯片产生。其中&#xff0c;FPGA和AD9162的divice clk时钟不同&#xff0c;并且FPGA的decive clk等同于JESD204B IP的co…

RK3568驱动指南|第九篇 设备模型-第100章 在总线目录下创建属性文件实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

如何利用ChatGPT处理文本、论文写作、AI绘图、文献查阅、PPT编辑、编程等

无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的支持。它可以为您提供论文结构指导、段落重组建议…

低代码技术:颠覆数据孤岛的技术利器

在当今数据驱动的世界中&#xff0c;数据的价值无可忽视。然而&#xff0c;很多组织面临一个普遍的问题&#xff0c;即数据孤岛。数据孤岛指的是不同部门或系统之间无法有效共享和集成数据的情况。这限制了组织在数据驱动的决策和创新方面的能力。然而&#xff0c;低代码平台的…

关于HarmonyOs的参数传递UI刷新以及List,Grid嵌套数据传递,ui刷新问题总结

最近在学习开发过程中遇见一系列的参数传递以及ui刷新问题&#xff0c;在这里做个总结分享。 以下是在开发过程中遇见的问题&#xff1a; 1.页面与子组件之间的参数传递与UI刷新 2.Builder自定义内部子组件的参数传递与UI刷新 3.Grid与List item发生变化Ui刷新问题 4.List…

陈述式资源管理(2)

命令行。声明式资源管理 三种常见的项目发布方式&#xff1a; 1、蓝绿发布 2、金丝雀发布&#xff08;灰度发布&#xff09; 3、滚动发布 应用程序升级&#xff0c;最大困难就是新旧业务之间的切换。立项 --- 定稿 --- 需求发布 --- 开发 --- 测试 --- 发布。测试之后上线…

docker搭建Dinky —— 筑梦之路

简介 Dinky 是一个 开箱即用 、易扩展 &#xff0c;以 Apache Flink 为基础&#xff0c;连接 OLAP 和 数据湖 等众多框架的 一站式 实时计算平台&#xff0c;致力于 流批一体 和 湖仓一体 的探索与实践。 主要功能 其主要功能如下&#xff1a; 沉浸式 FlinkSQL 数据开发&#x…

【感知机】感知机(perceptron)学习算法的原始形式

感知机( perceptron )是二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1 和-1二值。感知机对应输入空间(特征空间)中将实例划分为正负两类的分离超平面&#xff0c;是一种判别模型。感知机是神经网络与支持向量机的基础…

C#_var

文章目录 一、前言二、隐式类型的局部变量2.1 var和匿名类型2.2 批注 三、总结 一、前言 C#中有一个 var 类型&#xff0c;不管什么类型的变量&#xff0c;都可以用它接收&#xff0c;实属懒人最爱了。 我没有了解过它的底层&#xff0c;甚至没看过它的说明文档&#xff0c;也…