JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)
🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)
- **一、封装(Encapsulation)**
- **1. 什么是封装?**
- **2. 如何实现封装?**
- **3. 代码示例**
- **4. 封装的好处**
- **二、继承(Inheritance)**
- **1. 什么是继承?**
- **2. 代码示例**
- **3. 继承的注意事项**
- **三、多态(Polymorphism)**
- **1. 什么是多态?**
- **2. 方法重写(Override)**
- **3. 向上转型(Upcasting)**
- **4. 多态的优势**
- **四、总结与对比**
- **五、常见问题**
- **1. 方法重载(Overload) vs 方法重写(Override)**
- **2. 什么时候用继承?**
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)
好的!封装、继承和多态是面向对象编程(OOP)的三大核心特性,理解它们对掌握Java至关重要。我会用通俗易懂的方式为你讲解,并结合代码示例帮助你理解。
一、封装(Encapsulation)
1. 什么是封装?
- 定义:将数据(属性)和操作数据的方法(行为)捆绑在一个类中,并对外隐藏内部实现细节。
- 核心思想:隐藏对象的属性和实现细节,仅对外公开接口(方法)进行交互。
- 目的:提高安全性、可维护性、灵活性(例如:避免属性被随意修改)。
2. 如何实现封装?
- 使用访问修饰符控制属性的可见性:
private
:属性只能在当前类内访问。public
:属性或方法可以被任何类访问。protected
:允许子类和同包类访问。
- 提供公共的getter和setter方法操作属性。
3. 代码示例
public class Student {// 私有属性,外部无法直接访问private String name;private int age;// 公共的getter方法,允许外部获取属性值public String getName() {return name;}// 公共的setter方法,允许外部设置属性值(可添加校验逻辑)public void setName(String name) {if (name != null && !name.isEmpty()) {this.name = name;}}public int getAge() {return age;}public void setAge(int age) {if (age >= 0 && age <= 120) { // 校验年龄合法性this.age = age;}}
}// 使用示例
public class Main {public static void main(String[] args) {Student stu = new Student();stu.setName("Alice");stu.setAge(20);System.out.println(stu.getName() + ": " + stu.getAge());}
}
4. 封装的好处
- 安全性:防止属性被非法修改(如年龄为负数)。
- 灵活性:可以在setter方法中添加校验逻辑,而外部调用者无需关心。
- 代码维护:修改类的内部实现时,不影响外部代码。
二、继承(Inheritance)
1. 什么是继承?
- 定义:子类(派生类)继承父类(基类)的属性和方法,并可以扩展自己的功能。
- 核心思想:代码复用 + 扩展功能。
- 语法:使用
extends
关键字。
2. 代码示例
// 父类:Animal
class Animal {private String name;public void eat() {System.out.println(name + " is eating.");}public void setName(String name) {this.name = name;}
}// 子类:Dog(继承Animal)
class Dog extends Animal {// 扩展自己的方法public void bark() {System.out.println("Woof! Woof!");}
}// 使用示例
public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.setName("Buddy");dog.eat(); // 调用父类方法dog.bark(); // 调用子类方法}
}
3. 继承的注意事项
- 单继承:Java中一个类只能直接继承一个父类(不支持多继承)。
- 构造方法:子类构造方法默认会调用父类的无参构造方法(可通过
super()
显式调用父类构造方法)。 - 方法重写(Override):子类可以重写父类的方法(后面多态中详细讲解)。
三、多态(Polymorphism)
1. 什么是多态?
- 定义:同一操作作用于不同对象,可以有不同的行为(例如:同一方法在不同子类中有不同实现)。
- 两种形式:
- 编译时多态(静态多态):方法重载(Overload)。
- 运行时多态(动态多态):方法重写(Override) + 向上转型(Upcasting)。
2. 方法重写(Override)
- 子类重新定义父类中已有的方法。
- 规则:
- 方法名、参数列表必须与父类方法相同。
- 返回类型可以是父类方法返回类型的子类。
- 访问权限不能比父类方法更严格。
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}class Dog extends Animal {@Override // 注解:表示重写父类方法public void makeSound() {System.out.println("Dog barks: Woof!");}
}class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows: Meow~");}
}
3. 向上转型(Upcasting)
- 将子类对象赋值给父类引用变量。
- 目的:通过父类引用调用子类重写的方法,实现多态。
public class Main {public static void main(String[] args) {Animal animal1 = new Dog(); // 向上转型Animal animal2 = new Cat();animal1.makeSound(); // 输出 Dog barks: Woof!animal2.makeSound(); // 输出 Cat meows: Meow~}
}
4. 多态的优势
- 代码扩展性:新增子类时无需修改原有代码。
- 统一接口:用父类引用处理不同子类对象。
四、总结与对比
特性 | 核心思想 | 关键实现方式 |
---|---|---|
封装 | 隐藏细节,暴露接口 | private 属性 + getter/setter |
继承 | 代码复用,扩展功能 | extends 关键字 + 方法重写 |
多态 | 同一方法不同表现 | 方法重写 + 向上转型 |
五、常见问题
1. 方法重载(Overload) vs 方法重写(Override)
- 重载:同一类中,方法名相同,参数列表不同。
- 重写:子类中重新实现父类方法。
2. 什么时候用继承?
- 符合 “is-a” 关系时(例如:Dog is a Animal)。
- 避免过度继承(优先考虑组合而非继承)。
通过这三个特性,你可以设计出灵活、可维护的Java程序。建议结合代码实践,尝试自己编写一些类,体会它们之间的关系!
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇