Java面向对象从入门到精通,一次性讲透封装、继承、多态、抽象四大特性 + SOLID原则,全部配真实生产级代码! 建议收藏 + 点赞 + 转发,看完直接升中级开发! 一、面向对象到底是什么?99%的人没讲明白一句话:把现实世界的一切都抽象成“对象” 你、我、手机、外卖订单……全是对象! 每个对象都有: - 属性(状态):你叫什么名字、多大年龄
- 方法(行为):你会吃饭、会睡觉、会写代码
面向对象 vs 面向过程,一图秒懂项目 | 面向过程 | 面向对象 | 关注点 | 步骤 | 对象 | 数据安全 | 裸奔 | 穿防护服(封装) | 代码复用 | 函数复制粘贴 | 继承 + 组合 | 扩展性 | 拉胯 | 优秀 | 适合场景 | 简单脚本 | 企业级复杂系统 |
二、封装:大厂实体类都这么写(真实代码)@Getter @Setterpublic class User { private Long id; private String username; private String password; // 明文绝不外泄 private String phone; private String email; private Integer age; private Boolean enabled = true; private LocalDateTime createTime; // 密码永远脱敏返回 public String getPassword() { return "******"; } // 严格邮箱校验 public void setEmail(String email) { if (email != null && !email.matches("^[\\w-\\.]+@([\\w-]+\\.)+[a-z]{2,4}$")) { throw new IllegalArgumentException("邮箱格式不正确!"); } this.email = email; } // 手机号校验 + 脱敏展示 public void setPhone(String phone) { if (phone != null && !phone.matches("^1[3-9]\\d{9}$")) { throw new IllegalArgumentException("手机号格式错误!"); } this.phone = phone; } public String getPhone() { if (StringUtils.isBlank(phone)) return ""; return phone.substring(0, 3) + "****" + phone.substring(7); }}
三、继承:MyBatis-Plus真实用法(所有实体类都这么干)// 所有表公共字段抽取@TableLogicpublic class BaseEntity { @TableId(type = IdType.AUTO) private Long id; private LocalDateTime createTime; private LocalDateTime updateTime; private Boolean deleted = false; // 逻辑删除 @PrePersist public void prePersist() { this.createTime = this.updateTime = LocalDateTime.now(); } @PreUpdate public void preUpdate() { this.updateTime = LocalDateTime.now(); }}// 用户、订单、商品全部继承它public class User extends BaseEntity { private String username; private String phone; private String avatar;}public class Order extends BaseEntity { private String orderNo; private BigDecimal amount; private Integer status;}
四、多态:支付场景真实写法(Spring项目标配)public interface PaymentStrategy { boolean support(String payType); PaymentResult pay(PayRequest request);}// 支付宝实现@Service("ALIPAY")public class AlipayStrategy implements PaymentStrategy { @Override public boolean support(String payType) { return "alipay".equals(payType); } @Override public PaymentResult pay(PayRequest request) { // 调用支付宝SDK return PaymentResult.success("支付宝支付成功"); }}// 微信实现@Service("WECHAT")public class WechatPayStrategy implements PaymentStrategy { @Override public boolean support(String payType) { return "wechat".equals(payType); } // 类似实现...}// 统一入口(多态核心)@Servicepublic class PaymentService { @Autowired private List<PaymentStrategy> strategies; public PaymentResult pay(String payType, PayRequest request) { PaymentStrategy strategy = strategies.stream() .filter(s -> s.support(payType)) .findFirst() .orElseThrow(() -> new UnsupportedOperationException("不支持的支付方式")); return strategy.pay(request); // 同一行代码,多种实现! }}
五、抽象:抽象类 vs 接口(2025最新区别)
项目 | 抽象类 | 接口 | 方法实现 | 可以有普通方法 | Java8+可有default方法 | 成员变量 | 可以有普通变量 | 只能是public static final | 继承关系 | 单继承 | 多实现 | 设计意图 | is-a关系 | can-do能力 |
六、SOLID五大原则(大厂面试必背)- S 单一职责:一个类只干一件事
- O 开闭原则:对扩展开放,对修改关闭
- L 里氏替换:子类能无缝替换父类
- I 接口隔离:接口要小而专
- D 依赖倒置:依赖抽象,不依赖具体实现
最后总结:OOP精髓就8个字封装隐藏、继承复用、多态灵活、抽象解耦 查看详情:https://www.toutiao.com/article/7580997118224876082 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |