【JAVA学习之路 | 基础篇】面相对象特征--封装性

本文涉及的产品
访问控制,不限时长
简介: 【JAVA学习之路 | 基础篇】面相对象特征--封装性

1.我们为什么需要封装性

  1. 随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面相对象开发原则遵循"高内聚,低耦合".
  2. 高内聚、低耦合是软件工程中的概念,也是UNIX操作系统设计的经典原则.
  3. "高内聚",类的内部数据操作细节自己完成,不允许外部干涉.
  4. "低耦合",仅暴露少数方法给外部使用,尽量方便外部调用.
  5. 通俗的说:把该隐藏的隐藏起来,该暴露的暴露出来,体现封装的设计思想.

2.如何实现类的封装

  • 实现封装就是控制类或成员的可见性范围.这就需要依赖访问控制修饰符,也称为权限修饰符来控制.
  • 我们可以使用四种权限修饰符来修饰类即类的内部成员,当这些成员被调用时,体现可见性的大小.
  • 权限修饰符:public,protected,缺省,private.
修饰符        本类内部        本包内        其他包的子类        其他包的非子类
 
private         1               0               0                   0
 
 
缺省            1               1               0                    0
 
 
protected       1               1               1                   0
 
 
public          1               1               1                   1

3.权限的使用

  • 类 : 外部类只能使用public,缺省.
  • 类的内部成员 : 可以使用四种权限修饰符进行修饰.

4.封装性的体现

  • 私有化类的属性(private),提供公共的get/set方法.对此属性进行访问和更改.
  • 将类中不需要对外暴露的方法设置为private.虽然外部不能通过对象.方法来访问私有方法,但可以定义一个public方法,在该公共方法内调用私有方法.
public class Employee {
    private String name;
    private String gender;
    private int age;
    private String tephone;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getGender() {
        return gender;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setTephone(String tephone) {
        this.tephone = tephone;
    }
    public String gerInfo() {
        return name + "\t" + gender + "\t" + age + "\t" + tephone;
    }
}

5. 外部类为什么不能用protected修饰

原因 :

  • Java中的外部类不能使用`protected`修饰符。这是因为`protected`修饰符允许同一个包内的类以及所有子类访问该成员,无论这些子类位于何处。然而,对于外部类而言,这样的访问控制级别没有实际意义,因为外部类本身就是作为公共接口的一部分或者包内共享的,而不应该受限于只有子类才能访问的规则。
  • 此外,包之间没有继承关系,这意味着“子包”这一概念并不适用于对外部类的访问控制。因此,外部类只能使用`public`(公开访问,任何地方都能访问)或者默认访问修饰符(也就是不写任何访问修饰符,这时只有同一个包内的类可以访问)。如果你想控制外部类的访问权限,应该通过将类放在适当的包中并利用包的访问控制来实现。
  • 相比之下,内部类则可以使用`private`、`protected`以及默认和`public`修饰符,因为它是在另一个类的上下文中定义的,这些访问修饰符能够有效地控制内部类的可见性。
protected拿来修饰内部类.

public class A{

    protected class B{

         //

}

}


类B可以被类A子类访问,以及在同一包下的其他类访问,如果其他包下的类(本包下的类无需继承类A)想要创建类B的实例,他们必须通过继承类A并在其中操作.

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
25天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
86 43
Java学习十六—掌握注解:让编程更简单
|
17天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
21天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
42 17
|
10天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
20天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
20天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
18 0
|
Java
java学习第七天笔记-方法150-封装2方法使用
java学习第七天笔记-方法150-封装2方法使用
68 0
java学习第七天笔记-方法150-封装2方法使用
|
Java
java学习第六天笔记-方法129-综合联系-飞机票方法封装
java学习第六天笔记-方法129-综合联系-飞机票方法封装
59 0
java学习第六天笔记-方法129-综合联系-飞机票方法封装