在 Java 中,封装(Encapsulation)和继承(Inheritance)都是面向对象编程(OOP)的核心特性,它们不是对立关系,而是配合使用、相互支撑的关系。
下面用通俗方式说明它们各自是什么,以及之间的关系。
封装的本质是:把数据(属性)和操作数据的方法捆绑在一起,并隐藏内部实现细节,只暴露必要的接口。
典型做法:
private 修饰getter / setter 方法示例:
class Person {
private int age;
public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
public int getAge() {
return age;
}
}
✅ 封装关注的是:“我怎么保护和管理自己的数据”
继承的本质是:子类可以复用父类的属性和方法,并可以在此基础上扩展或重写。
示例:
class Student extends Person {
private String school;
public void setSchool(String school) {
this.school = school;
}
}
✅ 继承关注的是:“我怎么复用别人的能力”
如果父类没有封装,子类就能直接访问父类内部数据,会导致:
✅ 好的继承结构,父类一定是封装良好的
// 不好的设计
class Person {
public int age; // 随便改
}
// 好的设计
class Person {
private int age;
public int getAge() { return age; }
}
子类可以通过重写父类方法,影响父类行为:
class Parent {
public void show() {
System.out.println("Parent");
}
}
class Child extends Parent {
@Override
public void show() {
System.out.println("Child");
}
}
⚠️ 如果设计不好,继承会让封装变弱
Java 用修饰符控制“继承 + 封装”的边界:
| 修饰符 | 本类 | 同包 | 子类 | 其他 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
✅ protected 常用于:“只给子类用,不给外部用”
封装是“保护自己的方式”,继承是“复用他人的方式”;
没有封装的继承是危险的,好的继承一定建立在封装之上。
如果你愿意,我也可以用生活类比(比如“父子关系”)或者面试题角度再给你讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。