类与对象
理解面向对象思想,定义类、创建对象、构造方法
类与对象
面向对象编程把现实世界的事物抽象为类(模板)和对象(实例)。类是蓝图,对象是按蓝图造出来的具体东西。
学完本章你将: 定义类、创建对象、理解构造方法与封装。
类 = 属性 + 方法
类把数据和操作数据的方法打包在一起。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; // ❌ 编译错误!