封装与访问控制:让你的代码更加安全和可维护!

举报
喵手 发表于 2025/06/09 16:08:39 2025/06/09
【摘要】 开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,...

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前序

在面向对象编程中,封装是一个核心的概念。它让我们能够将对象的状态和行为封装在一起,提供对外界的接口,而隐藏内部实现细节。这不仅使得代码更加简洁,还能够保证数据的安全性和完整性。而封装的核心机制之一,就是访问控制

在Java中,访问控制是通过访问修饰符来实现的。访问修饰符允许我们定义类、方法或变量的可见性,决定了其他类能否访问这些成员。通过合理使用访问修饰符,我们能够更好地控制数据的访问权限,确保对象的状态只在合法的范围内被修改。

今天,让我们一起探讨封装与访问控制的相关概念,理解如何通过私有化成员、使用gettersetter方法以及合理使用访问修饰符,来保护对象的内部数据。


前言

你是否遇到过这样的情况:在写代码时,你希望某些变量或者方法不被外部直接访问和修改?这时,封装和访问控制就派上用场了。通过将数据私有化,并暴露出公开的接口,你可以让外部只能通过合法的方式与数据交互,从而避免潜在的错误和不一致的状态。

接下来,我们将一起深入探讨如何使用Java中的访问修饰符来实现封装,并通过gettersetter方法来控制对象的访问权限,保障数据的安全性。


第一部分:私有化成员:privateprotectedpublicdefault

Java中的访问修饰符有四种,它们分别控制类、方法和变量的访问权限:privateprotectedpublicdefault(包访问权限)。

1.1 private 修饰符

private表示成员变量或方法只能在同一个类内访问,外部类无法直接访问。这是最严格的访问控制,通常用于保护类的内部状态,避免外部直接修改。

示例:

public class Person {
    private String name;  // 私有化成员变量
    private int age;

    // 私有方法
    private void displayInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }

    // 公共的getter和setter方法来访问私有变量
    public String getName() {
        return name;
    }

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

解释:

  • nameage是私有的,不能被类外直接访问。
  • getName()setName()是公共的接口,外部可以通过它们来访问和修改name的值。

1.2 protected 修饰符

protected表示成员可以在同一个包内访问,也可以在不同包的子类中访问。这通常用于继承中的访问控制。

示例:

public class Animal {
    protected String name;

    protected void makeSound() {
        System.out.println("Animal makes sound");
    }
}

public class Dog extends Animal {
    public void displayInfo() {
        System.out.println("Dog's name: " + name);
    }
}

解释:

  • namemakeSound()Animal类中是protected的,Dog类作为Animal的子类,可以访问它们。

1.3 public 修饰符

public表示成员可以被任何类访问,不论是同一个包内还是不同包中的类。public是最宽松的访问控制,用于类、方法或变量需要被外部广泛访问时。

示例:

public class Person {
    public String name;
    
    public void speak() {
        System.out.println("Hello, I'm " + name);
    }
}

解释:

  • namespeak()public的,任何类都可以直接访问。

1.4 default 修饰符(包访问权限)

如果没有显式指定访问修饰符,则默认使用default访问权限。它表示成员只能在同一个包内访问,不能跨包访问。

示例:

class Car {
    String model;  // 默认访问修饰符(包访问权限)

    void start() {
        System.out.println("Car is starting...");
    }
}

解释:

  • modelstart()在同一个包内可以访问,但不同包的类无法访问。

第二部分:gettersetter方法

gettersetter方法通常用来访问和修改类中的私有变量。通过这两个方法,可以控制如何读取和修改变量的值,通常用于封装数据,使得类的内部实现与外部代码隔离开来。

2.1 getter方法

getter方法用于获取私有成员变量的值。它通常以get开头,后面跟着变量的名称(首字母大写)。

示例:

public class Person {
    private String name;

    public String getName() {
        return name;
    }
}

解释:

  • getName()方法返回私有成员变量name的值,外部通过这个方法可以访问到name

2.2 setter方法

setter方法用于设置私有成员变量的值。它通常以set开头,后面跟着变量的名称(首字母大写)。

示例:

public class Person {
    private String name;

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

解释:

  • setName()方法允许外部代码修改name的值。它通过this关键字来区分成员变量和方法参数。

2.3 为什么使用gettersetter方法?

  • 封装性:通过gettersetter方法,你可以在获取或设置值时,加入一些额外的逻辑。例如,你可以在setter方法中检查输入的有效性,或在getter方法中计算值。

  • 安全性:可以控制数据的访问权限,避免外部直接修改对象的内部状态。


第三部分:访问修饰符的使用场景

理解每个访问修饰符的使用场景,有助于我们在实际编程中做出更合理的设计决策。

3.1 使用private

  • 场景:你希望类的内部状态不被外部直接修改,保持数据的完整性。
  • 例子:所有的成员变量都可以设为private,并通过gettersetter方法来访问。

3.2 使用protected

  • 场景:你希望子类能够访问父类的成员,但又不希望其他类直接访问这些成员。
  • 例子:在继承关系中,父类的方法或变量需要被子类访问,但不希望外部类直接访问。

3.3 使用public

  • 场景:你希望类或方法可以被其他任何类访问。
  • 例子:某些方法是公开的,例如API的接口方法,或者类的公共功能。

3.4 使用default(包访问权限)

  • 场景:你希望同一个包内的类可以访问,但外部包的类不能访问。
  • 例子:某些类或方法不需要对外部暴露,只在同一包内使用。

总结

封装与访问控制是面向对象编程的基础之一。通过合理使用privateprotectedpublicdefault访问修饰符,可以有效地控制数据的访问权限,确保类的内部状态不会被外部直接篡改。此外,gettersetter方法能够提供访问私有变量的接口,同时增加了数据安全性和灵活性。

理解并运用这些概念,你将能编写出更加健壮和可维护的代码,提升代码的封装性和可扩展性。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。