【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
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
81 2
|
23天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
56 6
|
29天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
25 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
37 4
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2
|
3月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
113 3
|
3月前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
32 2