【Java|基础篇】面向对象三大特性之封装

简介: 面向对象有三个特性:封装,继承和多态,本文主要讲解封装. 封装是面向对象编程的基本原则之一,它可以提高程序的安全性、稳定性、可维护性和可扩展性,减少了代码的冗余,提高了代码的重用性。因此,在进行面向对象编程时,封装是一个非常重要的概念。

1.前言

面向对象有三个特性:封装,继承和多态,本文主要讲解封装. 封装是面向对象编程的基本原则之一,它可以提高程序的安全性、稳定性、可维护性和可扩展性,减少了代码的冗余,提高了代码的重用性。因此,在进行面向对象编程时,封装是一个非常重要的概念。


2.什么是封装

封装是一种面向对象编程的概念,它指的是将数据与方法组合在一起,形成一个类,在类的内部对数据进行操作和控制,从而达到保护数据、隔离复杂性和提高安全性的目的。


封装的原则: 对象代表什么,就应该封装对应的数据,并提供对应的数据对应的行为.

简单点理解就是使用访问权限修饰符对类中的成员变量和成员方法来限制访问权限.


3.如何更好的封装

先来看以下这部分的代码:


class Student{
    String name;
    int age;
    String sex;
    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}
public class Demo8 {
    public static void main(String[] args) {
        Student student = new Student("张三",18,"男");
        student.age = -15;
        System.out.println(student.toString());
    }
}


image.png

可以看到虽然在创建对象的时候就初始化好了成员变量的值,但是后续通过对象名+.的方式依旧是把对象的成员变量进行修改了.


对于这种情况,我们一般建议使用private修饰符(类私有的)修饰成员变量.

image.png

将成员变量设置成private修饰的之后,再次通过对象名+.的方法就无法对成员变量进行访问了.


但此时又会有一个问题.如果此时想修改成员变量的值该怎么办?

修改new对象的时候传入的参数,重新执行代码? 这是一种办法,但如果要在代码执行的过程中改变呢.这个时候上面的那种方法就不适用了 对于private修饰的成员变量,我们可以提供对应的getter和setter方法.


虽然private修饰的成员变量是类私有的,但是我们可以提供对应的方法帮助我们进行修改

public是公开的,任何地方都可以进行访问,在后面访问权限修饰符中会重点讲解

image.png

代码执行结果:

image.png

正确运行实例:

image.png

除了set方法,别忘了还有get方法.如果我们只想要拿到年龄,就可以去表用get方法

image.png

运行结果:

image.png


4.封装的好处

数据的隐藏:封装可以将数据隐藏在类的内部,避免了外部程序对数据的直接访问和修改,提高了程序的安全性和稳定性。


实现细节的隔离:封装可以隐藏实现细节,使得类的使用者只需要知道如何使用类的接口,而不需要关注具体的实现细节,降低了耦合度,提高了代码的可维护性和可扩展性。


接口的清晰:封装可以将类的接口与实现分离,使得类的使用者只需要关注接口的定义,而不需要了解实现细节,使得接口更加清晰和易于使用。


代码的重用:封装可以将相似的功能封装成类,使得代码更加模块化,提高了代码的重用性,减少了代码的冗余。


5.总结

通过封装,可以实现代码的可维护性、可扩展性和可重用性。封装可以隐藏类的实现细节,保护数据的安全性,提高代码的可读性和可靠性。同时,封装也可以提高代码的可扩展性,允许在不影响类的内部实现的情况下对其进行扩展和修改。

相关文章
|
3月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
3月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
163 1
|
3月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
148 0
Java API 开发者
119 0
|
4月前
|
安全 Java 编译器
Java面向对象
本文深入讲解了Java面向对象编程(OOP)的四大特性:封装、继承、多态与抽象,以及方法的设计与使用。通过示例展示了如何用类和对象组织代码,提升程序的可维护性与扩展性。
|
5月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
101 0
|
5月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
252 1
|
5月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
625 1
|
Java 编译器
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
251 2