示例解析java面向对象编程封装与访问控制

 更新时间:2023年05月30日 09:35:25   作者:移动安全星球  
这篇文章主要为大家介绍了java封装与访问控制的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

封装(Encapsulation)

是面向对象编程的一个核心概念,它意味着将数据(属性)和方法(操作数据的函数)捆绑在一起,形成一个类(Class)。封装的目的是将数据和操作数据的方法隐藏起来,以防止外部对数据的直接访问。这样,我们就可以通过定义公共接口(Public Interface)来控制外部对类的访问,提高代码的可维护性和安全性。

Java 提供了四种访问修饰符(Access Modifier)来实现封装,它们分别是:publicprivateprotected 和不写(默认)。访问修饰符可以修饰类的属性和方法,不同的访问修饰符有不同的访问权限。

  • public:最高权限,表示该属性或方法可以被任何其他类访问。
  • private:最低权限,表示该属性或方法只能被其所在的类访问。
  • protected:较低权限,表示该属性或方法可以被其所在类及其子类和同一包中的其他类访问。
  • 默认:表示该属性或方法可以被其所在类和同一包中的其他类访问,但不能被子类访问。

通过案例了解这四种访问修饰符

// 位于包 com.example 的 Person 类
package com.example;
public class Person {
    public String name;        // 公共属性,任何类都可以访问
    private int age;           // 私有属性,只能在 Person 类中访问
    protected String address;  // 受保护属性,可以在 Person 类,同一包中的类和子类中访问
    String phoneNumber;        // 默认属性,可以在 Person 类和同一包中的类访问,但不能被子类访问
    public void sayHello() {   // 公共方法,任何类都可以访问
        System.out.println("Hello! I am " + name);
    }
    private void growUp() {    // 私有方法,只能在 Person 类中访问
        age++;
    }
    protected void changeAddress(String newAddress) { // 受保护方法,可以在 Person 类,同一包中的类和子类中访问
        address = newAddress;
    }
    void updatePhoneNumber(String newNumber) { // 默认方法,可以在 Person 类和同一包中的类访问,但不能被子类访问
        phoneNumber = newNumber;
    }
}
// 位于包 com.example 的 Employee 类
package com.example;
public class Employee extends Person {
    public void work() {
        sayHello();            // 可以访问父类的公共方法 sayHello
        changeAddress("New York"); // 可以访问父类的受保护方法 changeAddress
    }
}
// 位于包 com.other 的 Another 类
package com.other;
import com.example.Person;
public class Another {
    public void test() {
        Person person = new Person();
        person.sayHello();     // 可以访问 Person 类的公共方法 sayHello
    }
}

这个例子中,Person 类有四个属性和四个方法,分别使用了四种不同的访问修饰符。Employee 类继承了 Person 类,可以访问其公共方法和受保护方法。Another 类虽然不在同一包中,但是可以访问 Person 类的公共方法。

当我们设计类时,应该尽量将属性设置为 private,并通过公共方法(如 getter 和 setter)来访问这些属性。这样做可以确保类的实现细节不会泄露给外部,提高代码的可维护性和安全性。

总结

封装和访问控制是面向对象编程的核心概念之一。通过使用访问修饰符,我们可以限制类的属性和方法的访问权限,从而保护类的实现细节。理解这些概念并在实际编程中应用它们,可以帮助我们编写更加健壮、可维护的代码。

以上就是示例解析java封装与访问控制的详细内容,更多关于java封装访问控制的资料请关注脚本之家其它相关文章!

相关文章

  • Spring @Transactional 自调用问题深度解析及解决方案

    Spring @Transactional 自调用问题深度解析及解决方案

    这篇文章主要介绍了Spring @Transactional 自调用问题深度解析及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04
  • 使用IntelliJ IDEA搭建SSM框架的图文教程

    使用IntelliJ IDEA搭建SSM框架的图文教程

    本文通过图文并茂的形式给大家介绍了使用IntelliJ IDEA搭建SSM框架的教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • 使用SpringBoot实现Redis多数据库缓存

    使用SpringBoot实现Redis多数据库缓存

    在我的系统中,为了优化用户行为数据的存储与访问效率,我引入了Redis缓存,并将数据分布在不同的Redis数据库中,通过这种方式,可以减少单一数据库的负载,提高系统的整体性能,所以本文给大家介绍了使用SpringBoot实现Redis多数据库缓存,需要的朋友可以参考下
    2024-06-06
  • 如何避免在Java项目里大批量使用if-else?

    如何避免在Java项目里大批量使用if-else?

    想起刚开始接触JAVA时,若遇到大量流程判断语句,几乎满屏都是if-else语句,多得让自己都忘了哪里是头,哪里是尾,但是,纵然满屏是if-else,但彼时也没有觉得多别扭.等到编程能力渐渐提升之后,再回过头去看曾经写过的满屏if-else时,感觉全都是翔.....,需要的朋友可以参考下
    2021-06-06
  • Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

    Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

    文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Service及测试示例,通过使用注解如@RedisHash、@Cacheable等,可以简化操作并提高性能,文章还提供了关键注解的说明和测试验证方法,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • java.lang.UnsupportedClassVersionError错误的解决办法(附图文)

    java.lang.UnsupportedClassVersionError错误的解决办法(附图文)

    这篇文章主要给大家介绍了关于java.lang.UnsupportedClassVersionError错误的解决办法,"java.lang.UnsupportedClassVersionError"意味着您正在运行的Java版本与编译该类时使用的Java版本不兼容,需要的朋友可以参考下
    2023-10-10
  • SpringCloud全面解析@FeignClient标识接口的过程

    SpringCloud全面解析@FeignClient标识接口的过程

    这篇文章主要介绍了SpringCloud全面解析@FeignClient标识接口的过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java NIO深入分析

    Java NIO深入分析

    本篇技术文章主要对Java新api(New IO)做了详细深入的讲解,有助于程序对NIO有更加深入的理解。
    2017-12-12
  • java 数据结构之栈与队列

    java 数据结构之栈与队列

    这篇文章主要介绍了java 数据结构之栈与队列的相关资料,这里对java中的栈和队列都做出实现实例来帮助大家理解学习数据结构,需要的朋友可以参考下
    2017-07-07
  • SpringBoot+Vue项目打包部署完整步骤教程

    SpringBoot+Vue项目打包部署完整步骤教程

    这篇文章主要介绍了SpringBoot+Vue项目打包部署的相关资料,包括Vue项目的打包设置、SpringBoot的配置修改、跨域问题处理、使用Nginx配置反向代理以及最终的项目启动,教程假定开发者已具备完整的前后端分离项目和配置好环境的服务器,需要的朋友可以参考下
    2024-10-10

最新评论