Z
ZHANK
面向对象基础

类与对象

理解面向对象思想,定义类、创建对象、构造方法

类与对象

面向对象编程把现实世界的事物抽象为类(模板)对象(实例)。类是蓝图,对象是按蓝图造出来的具体东西。

学完本章你将: 定义类、创建对象、理解构造方法与封装。


类 = 属性 + 方法

类把数据和操作数据的方法打包在一起。private 修饰的属性外部不能直接访问——这就是封装,保护数据不被随意修改。

java
public class Person {
    private String name;   // 属性 —— private,外部不可直接访问
    private int age;

    // 构造方法 —— 与类同名,无返回值,用来初始化对象
    public Person(String name, int age) {
        this.name = name;  // this.name 是属性,name 是参数
        this.age = age;
    }

    // 无参构造 —— 可提供默认值
    public Person() {
        this("Unknown", 0); // 调用另一个构造方法
    }

    // getter / setter —— 控制访问的唯一通道
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public void introduce() {
        System.out.println("我是" + name + "," + age + "岁");
    }
}

创建对象 —— new 关键字

new 在堆内存中分配空间,调用构造方法初始化,返回对象的引用。

java
Person alice = new Person("Alice", 25); // 创建 + 初始化
alice.introduce(); // "我是Alice,25岁"

Person bob = new Person(); // 用无参构造
bob.setName("Bob");

// ⚠️ 变量存的是引用,不是对象本身
Person p1 = new Person("Tom", 30);
Person p2 = p1;       // p2 和 p1 指向同一个对象
p2.setName("Jerry");
System.out.println(p1.getName()); // "Jerry"!p1 也被改了

封装 —— 保护数据

java
public class BankAccount {
    private double balance; // 余额不能让外部随意改

    public void deposit(double amount) {
        if (amount > 0) balance += amount; // 只能通过方法修改,可以加校验
    }

    public double getBalance() {
        return balance; // 只读访问
    }
}

BankAccount acc = new BankAccount();
acc.deposit(1000);
// acc.balance = -500; // ❌ 编译错误!真正保护了数据

bob.introduce(); // "我是Bob,0岁"

// 对象存储在堆内存,变量是引用 Person p1 = new Person("Tom", 30); Person p2 = p1; // p2 指向同一个对象 p2.setName("Jerry"); System.out.println(p1.getName()); // "Jerry"


---

## 封装

```java
public class BankAccount {
    private String owner;      // 外部不可直接访问
    private double balance;

    public BankAccount(String owner) {
        this.owner = owner;
        this.balance = 0;
    }

    public void deposit(double amount) {
        if (amount > 0) balance += amount;
    }

    public double getBalance() {
        return balance; // 只读访问
    }
}

// 使用
BankAccount acc = new BankAccount("Alice");
acc.deposit(1000);
System.out.println(acc.getBalance()); // 1000.0
// acc.balance = -500; // ❌ 编译错误!