0x00 Java 作为一种面向对象的编程语言,支持以下基本概念:
类(Class)
对象(Object)
继承(Inheritance)
封装(Encapsulation)
0x01 Java 为什么选择面向对象
Java 诞生于 1990 年代初,当时软件系统的规模和复杂度正快速膨胀(企业级应用、分布式系统、GUI 程序等),面向过程(Procedural)编程在这种背景下暴露出明显的维护和扩展瓶颈。Java 的设计者(Gosling 等人)从 C++ 中继承并强化了面向对象思想,同时刻意去掉了 C++ 中一些被认为"危险"或"混乱"的特性(如多重继承、指针运算、手动内存管理),试图打造一门"更纯粹、更安全"的 OOP 语言。
1. 数据与行为的封装(Encapsulation)
面向过程中,数据(结构体)和操作数据的函数是分离的,任何函数都可能修改任何数据,难以控制副作用。
面向对象把数据和操作数据的方法绑定在同一个对象里,并通过 private/protected/public 控制访问权限:
2. 更贴近现实世界的建模
面向过程是"以过程/步骤为中心"思考问题(先做什么、再做什么),而面向对象是"以实体为中心"思考问题。对于复杂系统(比如一个电商系统里的用户、商品、订单、支付),用对象建模会更自然、更符合人的直觉,代码结构也更容易和业务需求对应。
3. 可扩展性——继承与多态
这是面向对象相比面向过程最大的结构性优势之一。
4. 代码复用
面向过程:复用主要靠函数库,但数据结构和函数是割裂的,复用时容易产生耦合。
面向对象:通过继承、组合、接口复用逻辑和结构,比如 Java 的集合框架(
List、Map等接口 + 多种实现)就是复用性的典型体现。
5. 大型项目的可维护性/团队协作
面向对象通过类和模块划分天然地把系统拆成相对独立的单元,配合接口(interface)定义契约,不同开发者可以并行开发、独立测试,只要接口约定不变,内部实现可以随时替换(这也是"依赖倒置"思想的基础)。
0x02 什么是对象?
看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。
拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。
对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
0x03 什么是类
类可以看成是创建 Java 对象的模板。

通过上图创建一个简单的类来理解下 Java 中类的定义:
public class Dog {
String breed;
int size;
String colour;
int age;
void eat() {
}
void run() {
}
void sleep(){
}
void name(){
}
}
一个类可以包含以下类型变量:
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name()都是 Dog 类的方法。
0x04 构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。
0x05 源文件声明规则
在本节的最后部分,我们将学习源文件的声明规则。当在一个源文件中定义多个类,并且还有 import 语句和 package 语句时,要特别注意这些规则。
一个源文件中只能有一个
public类一个源文件可以有多个非
public类源文件的名称应该和
public类的类名保持一致。例如:源文件中 public 类的类名是Employee,那么源文件应该命名为Employee.java。如果一个类定义在某个包中,那么
package语句应该在源文件的首行。如果源文件包含
import语句,那么应该放在 package 语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
类有若干种访问级别,并且类也分不同的类型:抽象类和 final 类等。这些将在访问控制章节介绍。
除了上面提到的几种类型,Java 还有一些特殊的类,如:内部类、匿名类。
Java 一个类中可以嵌套另外一个类
Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。
主要是用于在我们需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。
匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。
评论