04、抽象 -- 面向对象的特性

  • 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃非本质的特征的过程。
    • 科学抽象的方法来透过事物的现象获得它的本质,并用概念、原理、规律的形式描述它

1、抽象的概述(抽象(Abstraction)-- 通用的设计思想)

  • 抽象是将复杂的现实世界抽象成简单的模型。

  • 在编程中,抽象是提取对象的核心特性忽略具体实现细节 只暴露必要的高层接口
    • 通过 抽象类(abstract class) 或 接口(interface) 定义规范强制子类实现抽象方法
  • 抽象的核心
    • 简化 复杂性,让调用者关注“做什么”(功能),而非“怎么做”(实现)。
abstract class Game {
    // 抽象方法:子类必须实现
    abstract void initialize();
    abstract void startPlay();

    // 模板方法:定义算法骨架
    public final void play() {
        initialize();
        startPlay();
    }
}

class Cricket extends Game {
    @Override
    void initialize() { System.out.println("初始化板球游戏"); }
    @Override
    void startPlay() { System.out.println("开始玩板球"); }
}

2、高度抽象所需的支持

  • 借助编程语言提供的接口类抽象类两种语法机制,来实现高度抽象这一特性。
    • 接口类:如 Java 中的 interface 关键字 语法。
    • 抽象类:如 Java 中的 abstract 关键字 语法。

3、抽象的应用场景

  • 抽象是一种只关注功能点不关注实现细节设计思路,能帮大脑过滤掉许多非必要信息

  • 定义 / 命名方法时,也要有抽象思维,不要在方法定义中,暴露太多的实现细节,以保证在某个时间点需要改变方法的实现逻辑时,不用去修改其定义。
    • 如: getAliyunPictureUrl() 就不是一个具有抽象思维命名
    • 因为,某一天不再把图片存储在阿里云上,而是存储在私有云上,那这个命名也要随之被修改
  • 如果定义一个比较抽象函数
    • 如: getPictureUrl(),那即便内部存储方式修改了,也不需要修改命名

4、封装 vs 抽象

维度封装(Encapsulation)抽象(Abstraction)
核心思想保护数据安全,隐藏实现细节简化复杂性,定义高层规范
实现手段访问修饰符( private / public ) + getter/setter抽象类/接口 + 抽象方法
关注内容数据(属性)的存储和访问控制行为(方法)的定义与实现分离
代码示例类的私有属性 + 公有方法抽象方法的声明 + 子类的具体实现
修改影响修改属性类型或校验逻辑需调整 getter/setter修改抽象方法的参数或返回值会影响所有子类

5、封装 和 抽象 通常结合使用,共同构建 健壮的 面向对象系统:

  • 抽象
    • Payment 接口定义了支付行为的规范。
    • 隐藏了具体支付方式(如:信用卡、支付宝)的实现细节。
  • 封装
    • CreditCardPayment 类封装了卡号(private 属性)。
    • 避免外部直接访问,同时实现了 pay() 方法的具体逻辑。
// 抽象:定义“支付”功能规范
interface Payment {
    void pay(double amount); // 抽象方法
}

// 封装:隐藏支付细节,保护敏感数据
class CreditCardPayment implements Payment {
    private String cardNumber; // 封装数据

    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    @Override
    public void pay(double amount) {
        // 抽象:隐藏支付实现细节(如调用银行 API)
        System.out.println("信用卡支付 " + amount + " 元,卡号:" + cardNumber);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值