1. 面向对象编程基础概念
面向对象编程(Object Oriented Programming, OOP)是现代软件开发中最主流的编程范式之一。它通过将现实世界中的事物抽象为程序中的对象,使代码更易于理解、维护和扩展。
1.1 面向对象与面向过程的区别
面向过程编程关注的是解决问题的步骤和过程,而面向对象编程关注的是对象和对象之间的交互。让我们通过一个实际例子来理解这个区别:
java复制// 面向过程:关注洗衣的步骤
public class ProcessOrientedLaundry {
public static void main(String[] args) {
openWasher(); // 1. 打开洗衣机
putClothes(); // 2. 放入衣服
addDetergent(); // 3. 添加洗衣粉
startWasher(); // 4. 启动洗衣机
dryClothes(); // 5. 晾晒衣服
}
// 每个步骤对应一个方法
static void openWasher() { /* 实现细节 */ }
static void putClothes() { /* 实现细节 */ }
// ...其他方法实现
}
// 面向对象:关注参与洗衣的对象及其交互
public class ObjectOrientedLaundry {
public static void main(String[] args) {
Person me = new Person();
WashingMachine washer = new WashingMachine();
Clothes myClothes = new Clothes();
me.wash(washer, myClothes); // 人让洗衣机洗衣服
}
}
面向对象编程的优势在于:
- 更贴近现实世界的思维方式
- 代码复用性更高(通过继承和多态)
- 更易于维护和扩展
- 更好的封装性,提高代码安全性
1.2 面向对象的三大特征
1.2.1 封装(Encapsulation)
封装是指将对象的属性和行为包装在一起,并隐藏内部实现细节。在Java中,我们通过private关键字实现封装:
java复制public class BankAccount {
private double balance; // 私有属性,外部无法直接访问
// 公共方法提供对balance的安全访问
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
1.2.2 继承(Inheritance)
继承允许我们基于现有类创建新类,实现代码复用。子类继承父类的属性和方法,并可以添加新的特性:
java复制public class Animal { // 父类
public void eat() {
System.out.println("动物在吃东西");
}
}
public class Dog extends Animal { // 子类
public void bark() {
System.out.println("狗在叫");
}
}
1.2.3 多态(Polymorphism)
多态指同一操作作用于不同对象时,可以有不同的解释和执行结果。Java中主要通过方法重写和接口实现多态:
java复制public class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 类与对象的关系
2.1 类(Class)的定义
类是对象的模板或蓝图,它描述了一类对象的共同特征和行为。类由以下部分组成:
- 成员变量(属性)
- 成员方法(行为)
- 构造方法
- 代码块
- 内部类
java复制public class Student {
// 成员变量(属性)
private String name;
private int age;
// 构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 成员方法(行为)
public void study() {
System.out.println(name + "正在学习");
}
// Getter和Setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.2 对象(Object)的创建与使用
对象是类的实例,通过new关键字创建:
java复制public class StudentTest {
public static void main(String[] args) {
// 创建Student对象
Student student1 = new Student("张三", 20);
Student student2 = new Student("李四", 21);
// 调用对象方法
student1.study();
student2.study();
// 访问对象属性(通过getter方法)
System.out.println(student1.getName() + "的年龄是:" + student1.getAge());
}
}
2.3 类与对象的内存模型
理解Java内存模型对掌握面向对象编程至关重要。Java内存主要分为:
- 栈内存(Stack):存储局部变量和方法调用
- 堆内存(Heap):存储对象实例
- 方法区(Method Area):存储类信息、常量池等
java复制Student s1 = new Student("张三", 20);
Student s2 = new Student("李四", 21);
内存分配示意图:
code复制栈内存 堆内存
┌───────────┐ ┌───────────────────┐
│ s1:0x100 │ ──────→│ Student对象 │
│ │ │ name="张三" │
│ s2:0x200 │ ───┐ │ age=20 │
└───────────┘ │ └───────────────────┘
│
└──→┌───────────────────┐
│ Student对象 │
│ name="李四" │
│ age=21 │
└───────────────────┘
3. 封装与访问控制
3.1 private关键字的使用
private是Java中最严格的访问修饰符,被private修饰的成员只能在当前类中访问:
java复制public class Person {
private String name;
private int age;
public void setName(String name) {
if (name != null && !name.isEmpty()) {
this.name = name;
}
}
public String getName() {
return name;
}
}
3.2 Getter和Setter方法
Getter和Setter方法是访问私有成员的标准方式,它们提供了对私有属性的受控访问:
java复制public class BankAccount {
private double balance;
public void deposit(double amount) {
if (amount
