理解JAVA三大特性:封装继承多态

理解JAVA三大特性:封装继承多态

面试官问:“JAVA的三大特性是哪些?”

我们肯定都能回答出来:封装、继承和多态

那这三大特性到底都有什么作用呢?

1. 封装

定义:把数据和操作数据的方法捆在一起,控制访问权限(通常通过 private字段 + public getter/setter方法),以隐藏内部实现并保证状态的一致性

  • 也就是把一个对象应该有的哪些字段(成员变量)和应该有的属性(setter/getter方法)封装成一个类

在我们的项目中,最典型的例子就是我们的entity类DTO/VO这些类(当然所有的类都包含封装特性)

1
2
3
4
5
6
7
8
9
10
11
@Data
public class DrugImgVO {
private Integer id;
private Integer drugId;
private String path;
private String currentName;
private String originalName;
private Boolean isMain;
private Integer sort;
private String externalPath;
}

2. 继承

定义子类继承父类的字段和方法,能够复用、扩展或重写父类行为。常用于抽象公共逻辑 / 模板方法 / 基类工具。

  • 可以把多个子类中重复的代码抽取到父类中,提高代码的复用性
  • 子类可以在父类的基础上增加其他功能,使子类更强大

另外:Java只支持单继承,不支持多继承,但支持多层继承

例如,在MyBatis-Plus中常见的继承场景:

1
2
public interface UserMapper extends BaseMapper<User> {
}

继承后你自动拥有以下这些方法可以直接调用:

  • selectById
  • selectList
  • insert
  • updateById
  • deleteById

对比一下extends继承和implements实现

对比点 extends implements
是否可以多继承 ❌ 类只能 extends 1 个类 ✅ 可以 implements 多个接口
是否必须实现方法 ❌ 不必须(可直接用父类方法) ✅ 必须实现接口的所有抽象方法
能否继承属性 ✅ 可以 ❌ 不可以
能否继承构造方法 ❌ 不可以 ❌ 不存在构造方法
是否属于继承体系 ✅ 是 ✅ 是(接口继承体系)

3. 多态

定义:同一个接口或父类引用,在运行时可以指向不同的具体实现;调用方法时,执行具体实现的代码(运行时绑定)

多态的本质

  • 同一个父类型引用,在运行时指向不同的子类对象,并调用子类的方法实现
  • 编译期看左边,运行期用右边

例如:

1
List<Integer> list = new ArrayList<>();

编译期看左边 List,运行期用右边 ArrayList

最大的作用就是可以“无痛切换实现类

  • 如果此时你发现使用LinkedList更好,可以直接更改右边的子类类型
1
2
// 改为:
List<Integer> list = new LinkedList<>();

就只需要该这个类型即可,后面的所有代码都不需要改,这就是多态的好处

END