面向对象三大特性
外观
面向对象三大特性[编辑 | 编辑源代码]
面向对象编程(Object-Oriented Programming, OOP)的三大核心特性是封装、继承和多态。这些特性共同构成了Java语言的设计基础,使代码更模块化、可重用和易维护。
1. 封装(Encapsulation)[编辑 | 编辑源代码]
封装是将数据(属性)和行为(方法)捆绑在一起的机制,同时对外隐藏内部实现细节。
核心原则[编辑 | 编辑源代码]
- 将字段设为私有(private)
- 通过公共方法(getter/setter)控制访问
- 隐藏不必要的实现细节
代码示例[编辑 | 编辑源代码]
public class BankAccount {
// 私有字段(数据隐藏)
private double balance;
private String accountNumber;
// 公共方法(受控访问)
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
// 私有方法(内部实现细节)
private void logTransaction(String type) {
System.out.println("Transaction: " + type);
}
}
实际应用[编辑 | 编辑源代码]
- 银行系统:隐藏账户余额计算逻辑
- 用户认证:封装密码验证过程
- API设计:暴露必要接口,隐藏实现
2. 继承(Inheritance)[编辑 | 编辑源代码]
继承允许创建基于现有类的新类,实现代码重用和层次结构组织。
类型体系[编辑 | 编辑源代码]
代码示例[编辑 | 编辑源代码]
// 父类
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
// 子类
class Dog extends Animal {
void bark() {
System.out.println("Dog is barking");
}
}
// 使用
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat(); // 继承自Animal
myDog.bark(); // 自有方法
}
}
输出结果:
Animal is eating Dog is barking
继承类型[编辑 | 编辑源代码]
- 单继承(Java只支持单类继承)
- 多级继承
- 接口多重继承(通过implements)
实际应用[编辑 | 编辑源代码]
- GUI组件库(Button → Component)
- 游戏开发(Enemy → Character)
- 企业系统(Manager → Employee)
3. 多态(Polymorphism)[编辑 | 编辑源代码]
多态允许不同类的对象对同一消息做出不同响应,分为编译时多态(重载)和运行时多态(重写)。
方法重载(Overloading)[编辑 | 编辑源代码]
同一类中方法名相同但参数不同:
class Calculator {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
String add(String a, String b) { return a.concat(b); }
}
方法重写(Overriding)[编辑 | 编辑源代码]
子类重新定义父类方法:
class Bird {
void fly() {
System.out.println("Bird is flying");
}
}
class Penguin extends Bird {
@Override
void fly() {
System.out.println("Penguin can't fly");
}
}
多态原理[编辑 | 编辑源代码]
- 向上转型(Upcasting):父类引用指向子类对象
- 动态绑定(Dynamic Binding):运行时确定实际调用方法
实际应用[编辑 | 编辑源代码]
- 支付系统(Payment接口 → 多种支付方式)
- 插件架构(统一接口不同实现)
- 集合框架(List接口 → ArrayList/LinkedList)
数学基础[编辑 | 编辑源代码]
多态的实现基于Liskov替换原则(LSP):
综合案例:电商系统[编辑 | 编辑源代码]
实现代码:
public class Main {
public static void main(String[] args) {
Product[] cart = {
new Book("Java编程", 59.99, "John Doe"),
new Electronics("手机", 2999.99, "2年")
};
for (Product p : cart) {
p.display(); // 多态调用
}
}
}
常见问题[编辑 | 编辑源代码]
最佳实践[编辑 | 编辑源代码]
- 封装:优先使用private,逐步放宽访问控制
- 继承:遵循"is-a"关系,避免过度继承
- 多态:面向接口编程,而非具体实现
总结表[编辑 | 编辑源代码]
特性 | 关键点 | 实现方式 | 优势 |
---|---|---|---|
封装 | 信息隐藏 | private字段 + 公共方法 | 安全性、易维护 |
继承 | 代码复用 | extends关键字 | 层次结构、扩展性 |
多态 | 多种形态 | 重载/重写 + 向上转型 | 灵活性、可扩展 |