博主也是刚接触代码一年的小白学习至今发现很多初学者会被封装、继承、多态这些概念绕晕。然后老师的讲解多少没有用比喻的方法去让我们更好理解,今天,我将用代码示例+生活比喻的方式,在这篇博客进行叙述,,哪里说的不对多多包容.
一、封装:你的隐私需要保护
1. 技术定义(就是书上那种又臭又长的定义)
封装(Encapsulation)是指将数据(属性)和行为(方法)捆绑在一起,并隐藏内部实现细节,仅暴露必要的接口。
2. 代码示例
public class 类名 {
private double 属性; // 私有属性,外部无法直接访问
// 公开方法供外部操作
public void 方法() {
方法体
}
public double get属性() { //我这里写的属性就是上面加粗的那个,这样写是为了方便读者理解
return 属性;
}
}
以下是完整示例代码:
public class BankAccount {
private double balance; // 私有属性,外部无法直接访问
// 公开方法供外部操作
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
3. 生活比喻
我们可以把对象想象成一个自动售货机:
我们买东西不需要知道内部如何计算找零、如何出货(隐藏实现)
只需通过投币口和按钮(公开接口)与它交互
如果直接拆开机器改钱箱(直接访问私有属性),会导致严重后果!
4. 为什么要封装?
防止外部随意修改数据
降低模块间的耦合度(也就是那句高内聚,低耦合)
便于维护(内部修改不影响外部调用)
二、继承:龙生龙,凤生凤
1. 技术定义
继承(Inheritance)允许子类获得父类的属性和方法,并可以扩展或重写。
2. 代码示例
class Animal {
void eat() {
System.out.println("吃东西");
}
}
class Cat extends Animal {
void meow() {
System.out.println("喵喵叫");
}
}
// 使用
Cat cat = new Cat();
cat.eat(); // 继承自Animal
cat.meow(); // 自己的方法
没有意外的话,代码就会输出吃东西喵喵叫
3. 生活比喻
就像家族遗传:
孩子继承父母的基本特征(如眼睛颜色)
但孩子可以有自己独特的能力(如会弹钢琴)
也可以"覆盖"父母的行为(父母说方言,孩子说普通话)当然这里就是方法重写了
4. 继承的注意事项
不要过度继承,父类可以有多个子类,但是子类只能有一个父类,就好比一个男的可以生多个孩子,孩子只有一个爸爸.
三、多态:同一个动作,不同表现
1. 技术定义
多态(Polymorphism)指同一操作作用于不同对象时,可以有不同的解释和执行结果。
2. 代码示例
interface Shape {
void draw();
}
class Circle implements Shape {
public void draw() {
System.out.println("画一个圆形");
}
}
class Square implements Shape {
public void draw() {
System.out.println("画一个方形");
}
}
// 测试
Shape s1 = new Circle();
Shape s2 = new Square();
s1.draw(); // 输出"画一个圆形"
s2.draw(); // 输出"画一个方形"
这里的implements是实现接口的意思,实现interface Shape这个接口
3. 生活比喻
就像"按下F键"在不同场景:
在游戏中:可能是开火(Fire)
在Word中:可能是查找(Find)
在资源管理器:可能是刷新(Fresh)
相同的消息(按下F键),不同的行为
4. 多态的实现方式
方法重写(Override)
接口实现
抽象类和抽象方法
综合对比表
特性 | 技术要点 | 生活比喻 | 主要优势 |
---|---|---|---|
封装 | 隐藏细节,暴露接口 | 自动售货机 | 安全性,易维护 |
继承 | 子类继承父类特性 | 家族遗传 | 代码复用,扩展性 |
多态 | 同一接口不同实现 | 按键的多重含义 | 程序灵活性,可扩展性 |