Java核心思想 - 面向对象编程(OOPL)
原创大约 3 分钟
Java核心思想-面向对象编程(OOP)
什么是面向对象编程?
发展历史简述
- 1960 年:类(Class)和对象(Object)的概念首次出现在 Simula 语言中。
- 1970 年代:Smalltalk 引入了“面向对象编程(OOP)”的概念,被认为是第一个真正意义上的 OOP 语言。
- 1980 年左右:C++ 出现,推动了 OOP 的广泛流行。
- 今天:大多数主流语言都支持 OOP(Java、C++、Python、C#、Ruby、JavaScript、Go、Scala、PHP 等)。
类和对象
面向对象编程中有两个非常重要、非常基础的概念,那就是类(Cass) 和对象(Object)。
- 类(Class) 是指对某一类事物的抽象描述,包含属性和方法。
- 对象(Object) 是类的实例,是在程序中具体存在的实体。
核心定义
- 面向对象编程(OOP, Object-Oriented Programming) 是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。
- 面向对象编程语言(OOPL, Object-Oriented Programming Language) 是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。
四大特性
封装(Encapsulation)
- 核心思想:隐藏实现、保护数据、对外提供接口。
- 实现方式: 通过
private
、protected
、public
等权限控制,把属性隐藏起来,通过方法来操作。 - 意义:
- 防止数据被随意修改,提高代码的安全性和可维护性。
- 对外只暴露必要的接口,提高类的易用性。
- 👉 通俗理解:“把属性藏起来,通过方法管起来”。
抽象(Abstraction)
- 核心思想:提取共性,屏蔽细节。
- 实现方式: 接口、抽象类,或者只提供方法定义而隐藏实现。
- 意义:
- 使用者只需关心做什么,不必关心怎么做。
- 提高代码的扩展性和维护性,修改实现不影响对外接口。
- 👉 通俗理解:“只告诉你功能,不告诉你原理”。
⚠️ 有的教程会把抽象 视为 封装的一部分(抽象 ≈ “隐藏细节、暴露共性”)
继承(Inheritance)
- 核心思想:子类复用父类的属性和方法,体现
is-a
关系。 - 模式:
- 单继承:一个子类只能继承一个父类(Java)。
- 多继承:一个子类可继承多个父类(C++ 支持,Java 通过接口间接实现)。
- 意义:
- 解决代码复用问题。
- 为多态打下基础。
- 👉 通俗理解:“子承父业”。
多态(Polymorphism)
- 核心思想:同一接口,不同实现,表现出不同行为。
- 定义: 多态是指子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。
- 实现方式: 继承 + 方法重写、接口实现、duck typing(动态语言)。
- 多态的三种类型:
- 编译时多态(静态多态)
- 通过**方法重载(Overload)**实现。
- 编译阶段决定调用哪个方法。
- 示例:
print(int a)
和print(String s)
。
- 运行时多态(动态多态)
- 通过方法重写(Override)和向上转型实现。
- 运行时根据实际对象类型决定调用哪个方法。
- 示例:父类
Animal
的speak()
被子类Dog
、Cat
重写。
- 参数化多态(泛型多态)
- 通过**泛型(Generics)**实现。
- 方法或类可以操作不同类型,而无需写多份代码。
- 示例:
List<String>
、List<Integer>
都能用同一个List<T>
实现。
- 编译时多态(静态多态)
- 意义:
- 提高代码的扩展性(新增子类无需修改原有逻辑)。
- 提升代码的复用性(相同代码可适配多种对象)。
- 是设计模式与面向对象编程技巧的核心基础。
- 👉 通俗理解:“一个接口,多种形态”。