一文搞懂Java面向对象编程中的封装机制

本文详细阐述Java面向对象编程的关键特性:封装。

微信搜索关注《Java学研大本营》

Java是一种面向对象的编程语言,即它是围绕对象的概念设计的。上篇文章介绍了Java面向对象编程的关键特性“继承”,本文介绍另一个关键特性:封装。

图片

1 封装

封装是面向对象编程(OOP)的一个基本概念,也是Java编程语言的核心特性。它是OOP的四个基本原则之一,另外三个是继承、多态和抽象。

封装本质上是将类的实现细节隐藏起来,提供一个公共接口与类进行交互。这意味着类的内部工作原理被保持为私有,只能通过一组明确定义的公共方法来访问。

2 访问修饰符

在Java中,封装是通过使用访问修饰符来实现的。访问修饰符是用于指定特定方法或变量的访问级别的关键字。Java中有四种访问修饰符:private、protected、public和默认的。

私有访问修饰符用于限制对方法或变量的访问范围,使用私有访问修饰符,只有在定义该成员的类内部才能访问该成员,其他类无法直接访问。受保护的访问修饰符用于将方法或变量的访问限制在定义它的类及其子类中,其他类无法直接访问。公共访问修饰符允许任何类访问方法或变量。默认的访问修饰符(也称为包私有访问修饰符)仅允许同一包中的类访问方法或变量。

通过使用访问修饰符来限制对类的内部工作原理的访问,封装有助于防止对类状态的意外更改,并能其更容易维护和扩展代码。例如,如果一个类有一个私有变量,只能通过公共setter方法访问,那么向setter方法添加验证逻辑会更容易,不必担心其他类直接访问变量。

封装还有助于促进模块化和代码重用,因为它允许将类用作更大、更复杂系统的构建块。通过在公共接口后面隐藏类的实现细节,其他开发人员可以使用该类而无需了解其工作细节,从而简化了代码的复杂度。这使开发和维护复杂系统变得更加容易,因为对系统的一部分进行更改不太可能对系统的其他部分产生意外后果。此外,封装还可以帮助开发人员更容易地理解和调试代码,因为它使代码更易于阅读和理解。

总之,封装是OOP的一个基本概念,也是Java编程语言的一个核心特性。它通过隐藏类的实现细节在公共接口后面,有助于促进模块化、代码重用和可维护性。通过使用访问修饰符来限制对类的内部工作原理的访问,封装有助于防止对类状态的意外更改,并使其更易维护和扩展代码。

3 示例

以下是Java中如何使用封装的示例:

public class Employee {
    private String name;
    private int age;
    private double salary;

    public Employee(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

在这个例子中,我们有一个Employee类,它有三个私有实例变量:name、age和salary。这些变量仅在Employee类本身内部可访问,其他类无法访问。

为了提供一个与这些变量进行交互的公共接口,我们定义了三个公共方法:getName()、getAge()和getSalary()。这些方法返回私有实例变量的值。

我们还定义了三个公共的setter方法:setName()、setAge()和setSalary()。这些方法允许其他类以受控的方式修改私有实例变量的值。例如,我们可以在setSalary()方法中添加验证逻辑,以确保新工资大于或等于员工的当前工资:

public void setSalary(double salary) {
    if (salary >= this.salary) {
        this.salary = salary;
    } else {
        System.out.println("Error: new salary cannot be lower than current salary");
    }
}

通过使用私有实例变量和公共getter和setter方法,我们封装了Employee类的实现细节,并提供了一个受控的接口来与之交互。这样,其他类可以创建Employee实例并使用其公共方法来获取和设置其私有实例变量的值,而无需了解如何实现这些变量。这有助于促进模块化、代码重用和可维护性,同时有助于防止对Employee类状态的意外更改,提高代码的可靠性和安全性。

推荐书单

秋日阅读企划icon-default.png?t=N7T8https://pro.m.jd.com/mall/active/3yzSCnrymNQEzLmwtZ868xFeytT7/index.html

《项目驱动零起点学Java》

《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。

作者是国内知名Java教学者和传播者,一路披荆斩棘,兢兢业业20余年。积累了丰富的“培”“训”经验,也产出了很多优质的教学理论。

Java语言经过数十年的发展,体系逐渐变得庞大而复杂,本书芟繁就简,提炼出了最为重要的知识点,可以让读者轻松上手。本书配套有专栏课程,课程中提供了扩展内容。

项目驱动零起点学Javaicon-default.png?t=N7T8https://item.jd.com/13607758.html

图片

精彩回顾

一文搞懂Java面向对象编程中的继承机制

4步实现Android中的Websocket

用好这4个设计模式,完成Java中的大部分任务

5个Java开发者不可不知的编程库

FPGA具有什么强大的功能,竟然可以代替CPU和GPU?

微信搜索关注《Java学研大本营》

访问【IT今日热榜】,发现每日技术热点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作封装在对象,通过对象之间的交互实现程序的设计开发。下面是一些关键概念,帮助你更好地理解Python面向对象编程。 1. (Class):是对象的蓝图或模板,描述了对象的属性和行为。它定义了对象的特征和方法。例如,我们可以定义一个名为"Car"的来表示汽车,其包含属性(如颜色、型号)和方法(如加速、刹车)。 2. 对象(Object):对象是的实例,是具体的实体。通过实例化,我们可以创建一个对象。例如,我们可以创建一个名为"my_car"的对象,它是基于"Car"的实例。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。每个对象都可以具有一组属性。例如,"Car"的属性可以包括颜色、型号等。 4. 方法(Method):方法是对象的行为,用于定义对象的操作。每个对象都可以具有一组方法。例如,"Car"的方法可以包括加速、刹车等。 5. 继承(Inheritance):继承是一种机制,允许我们创建一个新(称为子),从现有(称为父)继承属性和方法。子可以扩展或修改父的功能。继承可以实现代码重用和层次化设计。 6. 多态(Polymorphism):多态是一种特性,允许不同的对象对同一方法做出不同的响应。多态提高了代码的灵活性和可扩展性。 7. 封装(Encapsulation):封装是一种将数据和操作封装在对象机制,隐藏了对象的内部实现细节,只暴露必要的接口给外部使用。这样可以保护数据的安全性,提供了更好的模块化和代码复用性。 通过理解这些概念,你可以更好地掌握Python面向对象编程。在实践,你可以使用来创建对象,操作对象的属性和调用对象的方法,通过继承和多态实现代码的灵活性和可扩展性,通过封装保护数据的安全性和提高代码的可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值