跳转到内容

面向对象三大特性

来自代码酷
Admin留言 | 贡献2025年5月12日 (一) 00:23的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

模板:Note

面向对象三大特性[编辑 | 编辑源代码]

面向对象编程(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)[编辑 | 编辑源代码]

继承允许创建基于现有类的新类,实现代码重用和层次结构组织。

类型体系[编辑 | 编辑源代码]

classDiagram class Vehicle { +String brand +void startEngine() } class Car { +int numDoors +void openTrunk() } class Motorcycle { +boolean hasSidecar } Vehicle <|-- Car Vehicle <|-- Motorcycle

代码示例[编辑 | 编辑源代码]

// 父类
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): x:T.y:S.如果ST那么y可替换x

综合案例:电商系统[编辑 | 编辑源代码]

classDiagram class Product { <<abstract>> +String name +double price +abstract void display() } class Book { +String author +void display() } class Electronics { +String warranty +void display() } Product <|-- Book Product <|-- Electronics

实现代码:

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(); // 多态调用
        }
    }
}

常见问题[编辑 | 编辑源代码]

模板:Q&A

模板:Q&A

最佳实践[编辑 | 编辑源代码]

  • 封装:优先使用private,逐步放宽访问控制
  • 继承:遵循"is-a"关系,避免过度继承
  • 多态:面向接口编程,而非具体实现

总结表[编辑 | 编辑源代码]

三大特性对比
特性 关键点 实现方式 优势
封装 信息隐藏 private字段 + 公共方法 安全性、易维护
继承 代码复用 extends关键字 层次结构、扩展性
多态 多种形态 重载/重写 + 向上转型 灵活性、可扩展