如何理解类作为模板与对象作为实例的面向对象思维

夜雪小哥_3021

夜雪小哥_3021

2026-04-07

657人浏览

原创

类是描述一类东西的声明而非实体,它不占运行时内存,仅作为模板定义共性;实例化则分配独立状态空间,每个对象拥有独立字段但共享方法代码。

如何理解类作为模板与对象作为实例的面向对象思维

类不是“东西”,而是描述“一类东西”的声明

很多人初学时会把 class Person 当成一个真实存在的实体,甚至试图直接调用它。其实不然——类本身不占运行时内存,也不执行任何行为,它只是编译器/解释器能读懂的一份“说明书”。比如 class Dog 并不等于一只狗,它只说明:如果有狗,它该有 name、age 这些字段,能调用 bark()、sleep() 这些方法。

关键区别在于:类定义的是共性,对象承载的是个性。同一份 Dog 类可以生成 dog1 = new Dog("旺财", 3) 和 dog2 = new Dog("小白", 5),它们共享 bark() 的逻辑,但 name 和 age 各自独立。

实例化不是“复制代码”,而是分配独立状态空间

写 new Dog() 时,真正发生的是:JVM(或 Python 解释器)在堆内存中划出一块新区域,填入该对象的字段值,并让这个区域指向类里定义的方法入口。方法代码本身只存一份,但每个对象都有自己的 name、age 副本。

容易踩的坑:

  • 误以为修改 dog1.name = "大黄" 会影响 dog2.name ——不会,它们是不同内存地址上的独立变量
  • 在类里直接给可变对象赋默认值,比如 self.tags = [](Python)或 private List tags = new ArrayList();(Java)——若未在构造器中重置,多个实例可能意外共享同一个容器
  • 把静态字段(static / @classmethod)当成实例状态用,导致跨对象污染

模板的约束力体现在编译/加载阶段,而非运行时

类作为模板,它的“模板性”主要起检查和组织作用:

  • Java 中,你不能给 Dog 对象赋一个 catName 字段,因为类没声明它;而 Python 虽然允许动态加属性,但一旦依赖 hasattr(dog, "catName") 就容易漏判
  • 类型系统(如 TypeScript、Java 泛型)靠类声明推导参数和返回值,List 约束的是“能装什么”,不是“现在装了几个”
  • 继承关系(class Bulldog extends Dog)本质是扩展模板:子类模板 = 父类模板 + 新增字段/方法 + 可选重写

换句话说,模板不决定对象“能活多久”,但决定了它“出生时带什么证件、能办哪些事”。

真正容易被忽略的点:类可以没有实例,但实例绝不能脱离类(隐式或显式)

有些语言支持匿名对象(如 JavaScript 的 { name: "Tom", age: 25 }),看似绕开了类,但它的结构依然对应着某个隐式契约——你传给函数时,对方仍按“有 name 和 age 字段的对象”来用。Python 的 dataclass 或 Java 的 record,表面省略了 class 关键字,底层仍是编译器帮你生成的类定义。

所以别纠结“要不要先写类”,重点是:当你需要多个具有相同结构+行为的东西,并且它们的状态要彼此隔离时,那个结构声明,就是你的模板;而每次用它造出来的东西,就是不可替代的实例。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11897

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8982

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7692

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1264

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

1008

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1516

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3109

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20371

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1355

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习