程序代码篇---类

为什么有类:

要理解编程语言中为什么会有 “类”,我们可以从日常生活的例子入手。

想象你要描述 “汽车” 这个事物:

  • 它有属性(颜色、品牌、排量)
  • 它有行为(行驶、刹车、鸣笛)

如果没有类,每次提到汽车时,都要重新描述这些属性和行为,非常麻烦。而类就像一个 “模板”,提前定义好某类事物共有的属性和行为,以后需要时直接用这个模板 “复制” 即可。

举个具体例子:

  • 定义一个 “汽车类”,包含属性(颜色、品牌)和行为(行驶 ()、刹车 ())
  • 当需要创建具体的汽车时(比如 “我的红色特斯拉”),直接用这个类生成,不用重新定义 “行驶” 和 “刹车” 这些通用功能

类的好处主要有三个:

  1. 减少重复代码:同类事物的共性只需要定义一次
  2. 逻辑更清晰:把相关的属性和行为打包在一起,就像现实世界中 “汽车” 就该包含那些功能
  3. 方便扩展:在已有类的基础上,可以轻松创建更具体的类(比如在 “汽车类” 基础上创建 “电动车类”)

简单说,类就是编程语言模仿现实世界的方式 —— 现实中我们会把事物归类(比如汽车、动物、人),编程中用类来实现这种归类,让代码更贴近我们的思维习惯,也更易于管理。

不同编程语言中的类:

不同编程语言中的 “类” 就像不同国家描述 “汽车” 的方式 —— 核心都是定义 “属性和行为”,但细节上有各自的习惯。下面用通俗的方式对比常见语言的类:

一、所有语言类的共同点

不管哪种语言,类的核心作用完全一样:

  1. 都是 “模板”:定义某类事物的共有属性(比如汽车的颜色)和行为(比如行驶)
  2. 都能 “复制”:用类创建具体的实例(比如用 “汽车类” 造出我的特斯拉)
  3. 都支持 “继承”:比如 “电动车类” 可以继承 “汽车类” 的基础功能,再添加自己的特性(充电)

二、不同语言的类的主要区别

1. Java:最 “严格” 的类
  • 必须装在 “盒子” 里:每个类必须放在单独的文件里,文件名还得和类名一样(比如Car.java里只能有Car类)
  • 强制 “分类”:定义类时必须明确说明是普通类(class)、不能被继承的 “最终类”(final class),还是只能被继承的 “抽象类”(abstract class
  • 例子
    // 必须放在Car.java文件中
    public class Car {// 属性必须声明类型String color;// 行为(方法)必须写返回值类型public void drive() {System.out.println("开起来了");}
    }
    
2. Python:最 “灵活” 的类
  • 随意改模板:创建实例后,甚至能给单个实例临时加属性(比如给我的车单独加个 “车载冰箱”,别人的车没有)
  • 没有 “严格规则”:不需要提前声明属性类型,类和实例的修改非常自由
  • 例子
    class Car:# 不用声明属性类型,灵活添加def __init__(self, color):self.color = color  # 初始化时才定义属性def drive(self):print("开起来了")# 实例化后还能临时加属性
    my_car = Car("红色")
    my_car.has_fridge = True  # 给我的车单独加个冰箱
    
3. C++:最 “全能” 的类
  • 支持 “多重继承”:一个类可以同时继承多个类的功能(比如 “水陆两用车” 同时继承 “汽车类” 和 “船类”),而 Java/Python(默认)只支持单继承
  • 能 “隐藏细节”:可以严格控制哪些属性 / 行为对外公开(public),哪些只能内部用(private
  • 例子
    class Car {
    public:  // 公开的行为void drive() {cout << "开起来了" << endl;}
    private:  // 隐藏的属性,外部不能直接改string color;
    };
    
4. JavaScript:最 “特别” 的类
  • 曾经没有类:早期 JS 用 “原型(prototype)” 模仿类的功能,直到 ES6 才正式加入class语法,但本质还是基于原型
  • 更像 “函数”:类的底层其实是函数,创建实例的方式也和其他语言不同
  • 例子
    class Car {constructor(color) {this.color = color;}drive() {console.log("开起来了");}
    }// 创建实例的方式和其他语言类似
    const myCar = new Car("红色");
    
5. PHP:最 “简单直接” 的类
  • 语法宽松:不需要严格的类型声明,适合快速开发
  • 和网页结合紧密:类的设计常考虑 Web 场景(比如处理表单、数据库)
  • 例子
    class Car {public $color;function drive() {echo "开起来了";}
    }
    

三、总结:核心差异用一句话概括

  • Java:类是 “规矩森严的模板”,必须按规则来
  • Python:类是 “灵活的橡皮泥”,想怎么改就怎么改
  • C++:类是 “多功能工具箱”,支持复杂的继承和权限控制
  • JavaScript:类是 “披着类外衣的原型”,本质更像函数
  • PHP:类是 “简单易用的工具”,适合快速搭建 Web 功能

不管差异多大,类的核心目的始终没变:让代码更像现实世界,减少重复劳动。就像不管用中文还是英文描述 “汽车”,它终究是那个有轮子能跑的交通工具~

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

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

相关文章

jenkins备份迁移

1、确认Jenkins版本 在web界面操作步骤&#xff1a;登录Jenkins管理控制台点击左上角"Jenkins"图标选择"Manage Jenkins" > "About Jenkins"在页面中查看"Version"字段显示的具体版本号&#xff08;如2.479.2&#xff09; 建议截图…

Video Ocean 接入 GPT-5

Video Ocean&#xff1a;全球首个接入 GPT-5 的视频智能体引领 AI 视频创作革命 一、技术全景&#xff1a;Video Ocean 的架构与创新 1.1 全球首个 GPT-5 视频智能体的技术突破 Video Ocean 作为全球首个接入 GPT-5 的视频智能体&#xff0c;代表了 AI 视频生成领域的重大突…

如何在API高并发中玩转资源隔离与限流策略?

url: /posts/4ad4ec1dbd80bcf5670fb397ca7cc68c/ title: 如何在API高并发中玩转资源隔离与限流策略? date: 2025-08-27T23:26:45+08:00 lastmod: 2025-08-27T23:26:45+08:00 author: cmdragon summary: 资源隔离是保障API稳定性的核心,通过路由隔离和依赖隔离实现关键业务与…

Swift 解法详解 LeetCode 365:水壶问题

文章目录摘要描述题解答案题解代码分析代码拆解示例测试及结果时间复杂度空间复杂度总结摘要 这道题其实就是经典的 “两个水壶问题”&#xff0c;你可能在电影《虎胆龙威3》里见过&#xff0c;布鲁斯威利斯用两个水壶精确量出 4 升水来解除炸弹。这题就是把那个场景搬到了编程…

Redis集群介绍——主从、哨兵、集群

Redis集群介绍 集群里有三大模式&#xff1a; Redis主从模式&#xff1a;一主一从或一主多从&#xff0c;自带读写分离&#xff0c;负载均衡&#xff1b; Redis哨兵模式&#xff1a;高可用&#xff0c;主服务器宕机&#xff0c;从服务器变为主服务器&#xff1b; Redis集群…

【大前端】封装一个React Native与Android/IOS 端通用的埋点接口

RN 层只暴露一个统一的埋点方法&#xff0c;例如 trackEvent(eventName, params)&#xff0c;内部通过 NativeModule 调用 Android/iOS 的原生埋点 SDK。这样 RN 层不用关心具体实现。写一个通用的示例&#xff1a;1. RN 层封装统一接口&#xff08;JS 代码&#xff09;// anal…

详解 外部负载均衡器 → Ingress Controller Pod 这个过程

在常见的生产架构中&#xff1a; 外部负载均衡器&#xff08;Ng/ELB/ALB/NLB等&#xff09;终止来自客户端的 HTTPS 连接。 它将解密后的明文 HTTP 请求转发给后端的 Kubernetes Ingress Controller Pods。 Ingress Controller 处理 HTTP 请求&#xff0c;并将 HTTP 响应返回给…

Markdown 编辑器 语法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

【PyTorch项目实战】SAM(Segment Anything Model) —— 致力于建立第一个图像分割基础模型

文章目录一、SAM&#xff08;Segment Anything Model&#xff09; —— 致力于建立第一个图像分割基础模型&#xff08;Foundation Model&#xff09;1、项目背景2、核心任务设计3、模型架构&#xff1a;图像编码器 提示编码器 掩码解码器4、核心创新&#xff1a;可提示分割任…

第一次实习总结

开发模式的转变现在虽然不怎么使用很传统的软件开发模型了&#xff0c;但是好歹也要敏捷开发吧。事实上&#xff0c;我这个小厂甚至做的更绝。全程无UML。。。需要一天&#xff1a;1.项目组长与客户进行需求对接。2.项目组长然后就找我来讲述需求&#xff0c;我就直接制作出原型…

创建uniApp小程序项目vue3+ts+uniapp

vscode创建pnpm i -D types/wechat-miniprogram uni-helper/uni-app-types{"compilerOptions": {"types": ["dcloudio/types","types/wechat-miniprogram","uni-helper/uni-app-types"] },"vueCompilerOptions": …

GitHub 热榜项目 - 日榜(2025-08-28)

GitHub 热榜项目 - 日榜(2025-08-28) 生成于&#xff1a;2025-08-28 统计摘要 共发现热门项目&#xff1a;13 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热门项目凸显三大技术趋势&#xff1a;1) AI领域持续爆发&#xff0c;涵盖大模型系统提示研究(asgeirt…

IPV6

本节课要掌握的知识点&#xff08;学习目标&#xff09; 概括IPv6相较于IPv4的优势 (Why IPv6?) 描述IPv6的基本概念 描述IPv6报文头部的格式和原理 描述IPv6地址格式和地址类型 描述IPv6地址配置的方法和基本过程 执行IPv6地址以及IPv6静态路由的简单配置 一、IPV6 基础…

零基础开发应用:cpolar+Appsmith平民化方案

文章目录前言1.什么是Appsmith2.Docker部署3.Appsmith简单使用4.安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结前言 你是否也曾想搭建一个属于自己的应用&#xff0c;却被复杂的编程知识吓退&#xff1f;或者&#xff0c;想快速开发一个小工具解决工作难题&#…

【Ruoyi 解密 - 08. 前端探秘1】------ 从“交互原理”到“开发逻辑”,后端也能看懂的前端实战指南

Ruoyi-Vue3 核心知识点串讲&#xff1a;从“交互原理”到“开发逻辑”&#xff0c;后端也能看懂的前端实战指南 对于非前端工程师而言&#xff0c;学习 Ruoyi-Vue3 并非要成为专业前端开发者&#xff0c;而是要掌握“前后端交互逻辑”——搞懂数据如何从后端接口流转到前端页面…

Java SpringBoot+Mybatis-Flex+Logback实现打印日志

先看效果2025-08-26 09:52:19.834 [http-nio-10003-exec-10] INFO c.x.c.logging.RequestLoggingFilter - HTTP请求: {headers{content-length213, host192.168.31.149:10003, content-typeapplication/json, connectionkeep-alive, accept-encodinggzip, deflate, br, user-a…

SegEarth-R1: Geospatial Pixel Reasoning via Large Language Model

摘要 遥感技术已成为理解环境动态、城市规划和灾害管理的关键。然而,传统的遥感工作流程通常依赖显式分割或检测方法,这些方法难以处理需要对空间上下文、领域知识和隐含用户意图进行推理的复杂隐式查询。受此启发,我们提出了一项新任务——地理空间像素推理,该任务允许隐…

CRMEB标准版PHP移动应用微信开放配置及商城后台配置教程(附步骤)

APP配置内容主要围绕微信开放平台里的移动应用来配置;开发平台地址为:https://open.weixin.qq.com/ 1. 登录开发平台创建【移动应用】点击创建移动应用 2. 进入创建页面后根据页面提示填写对应信息 在是否上架的地方可以先选择否&#xff1b; 3.填写平台信息 根据自身需求勾选…

jQuery 从入门到实践:基础语法、事件与元素操作全解析

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 ​编辑 ⛅️定义 &#x1f353;引入依赖 ​编辑⛅️语法 &#x1f351;基础语法 &#x1f351;选择器 &#x1f351;jQuery事件 ⛅️操作 &#x1f350;添加操作…

野火STM32Modbus主机读取寄存器/线圈失败(二)-解决CRC校验错误

文章目录前情提要问题背景CRC校验失败问题现象原始问题数据问题分析1. CRC校验算法验证2. 手动计算验证问题解决思路问题解决根本原因解决方式1解决方式2重新编译测试前情提要 在自己的开发板上移植了野火的modbus主机程序并尝试使用。 问题背景 我使用STM32显示板作为Modbu…