Hi!这里是 JustHappy 这是专为编程初学者准备的专栏,哈哈,AI 时代更需要我们返璞归真!

每个学编程的人,几乎都会遇到一个词:面向对象。
然后就会看到三个经典概念:封装、继承、多态 。 很多教材会告诉你:面向对象是一种编程思想。 但这句话其实和没说一样。 今天我们不用 Java,不用 C++,甚至不用代码。 只用 JSON,把面向对象彻底讲明白。
JSON 是一种用"键:值"的结构来表示和传输数据的通用文本格式,看起来像对象/字典,机器好解析、人也好读。
一、什么叫对象?
现实世界里有什么?人、汽车、手机、猫、狗......这些都叫对象。
因为它们都拥有两样东西:属性 和 行为。
例如一个人:
json
{
"name": "张三",
"age": 18,
"gender": "男"
}
这里的 name、age、gender,就是属性。
如果给它增加行为:
json
{
"name": "张三",
"age": 18,
"actions": [
"eat",
"sleep",
"study"
]
}
那么这就是一个完整的人。
所以对象其实没那么神秘。一句话:
对象就是现实世界中的一个具体事物。
二、什么叫封装?
很多教材会说:把数据和方法包装到一起。新手通常听不懂。
我们换个角度。
假设你的银行卡长这样:
json
{
"cardId": "6222xxxx",
"balance": 5000
}
理论上谁都可以改余额:
json
{
"cardId": "6222xxxx",
"balance": 999999999
}
那银行第二天就倒闭了。
所以真正的银行卡应该这样:
json
{
"cardId": "6222xxxx",
"balance": "private",
"methods": [
"deposit",
"withdraw"
]
}
用户看不到余额的存储方式,只能通过存钱、取钱两个入口操作。
这就是封装。
封装不是为了炫技,而是为了保护数据。
所以封装的本质是:
不让别人乱改我的数据。
三、什么叫继承?
现实世界中很多东西都有共同特征。
例如:
json
{
"type": "动物",
"hasEyes": true,
"canMove": true
}
猫是动物:
json
{
"type": "猫",
"hasEyes": true,
"canMove": true,
"sound": "喵喵"
}
狗也是动物:
json
{
"type": "狗",
"hasEyes": true,
"canMove": true,
"sound": "汪汪"
}
你会发现 hasEyes、canMove 重复出现了。
于是程序员说:这些公共部分抽出来。
变成:
json
{
"Animal": {
"hasEyes": true,
"canMove": true
}
}
然后:
json
{
"Cat": {
"extends": "Animal",
"sound": "喵喵"
}
}
json
{
"Dog": {
"extends": "Animal",
"sound": "汪汪"
}
}
这就是继承。
继承的目的只有一个:代码复用。
四、什么叫多态?
这是最容易把人绕晕的概念,其实特别简单。
先看两个对象:
json
{
"type": "Cat",
"sound": "喵喵"
}
json
{
"type": "Dog",
"sound": "汪汪"
}
它们都有一个动作:speak(),但是结果不同。
猫执行会得到"喵喵",狗执行会得到"汪汪"。
你会发现:虽然调用的是同一个动作,但表现不同。
这就是多态。
程序看到的是"动物.speak()",实际执行时是"猫 -> 喵喵,狗 -> 汪汪"。
所以多态本质上是:
同一个命令,不同对象有不同表现。
五、面向对象到底解决了什么问题?
如果没有面向对象,代码会越来越像:一堆变量、一堆函数、一堆 if else,最后没人知道谁是谁。
而面向对象做的事情非常简单:按照现实世界组织代码。
人归人,车归车,动物归动物。每个对象管理自己的数据和行为。
于是代码世界开始变得有秩序。
所以面向对象最核心的一句话其实不是"封装、继承、多态",而是:
用现实世界的思维管理程序世界。