何为封装

从事面向对象编程的 Java 程序员,不可能不知道封装,它是面向对象编程的精髓,非常重要。

那什么是封装?字面意思就是把摆在外面的东西包起来。

一句话,封装就是对外隐藏内部细节

那为何要封装,也就是隐藏内部细节呢?

道理很简单,如果你买了一部手机,你会不会关心手机内部的细节,比如电路板是如何设计的,手机程序是如何编写的;我想绝大部分人,应该只会关心手机能够对外提供哪些功能。而手机的内部细节则被手机开发商完全封装在手机的机壳里。

想必你应该已经感受到了封装的好处,通过封装我们可以轻松优雅的玩转各种复杂设备,因为我们压根就不关心这些玩意儿是怎么造出来的,只在意提供了哪些功能,以及这些功能如何使用。

封装的好处总结如下:

  • 封装可以隐藏大量内部细节降低使用难度(手机使用)

  • 封装可以使修改内部细节不影响外部使用(手机升级)

  • 封装可以降低内部组件之间的耦合度(手机维修)

Java 封装

Java 语言中提供了两个权限访问修饰符,分别是 private 和 public,它们专门实现 Java 对象的封闭和开放。

public 访问修饰符

public 表示公用的,也就是对外公开

public 访问修饰符可以修饰类、成员变量和方法,代码如下:

public class Man {
public int age;
public String name; public void play() {
System.out.println("喜欢打游戏");
}
}

以上代码在类、成员变量和方法中都使用了 public 权限访问修饰符,表示它们都对外开放,对象使用者可以访问它们,如下:

Man man = new Man();
man.age = 32;
man.name = "张三“;
man.play();

private 访问修饰符

private 表示私有的,也就是隐藏,不对外公开

假如我们不想随便对外公开年龄、姓名和兴趣,那么就可以使用 private 将其隐藏起来,让对象使用者没有权限访问,如下:

public class Man {
private int age;
private String name; private void play() {
System.out.println("喜欢打游戏");
}
}

还是用外部对象访问,如下:

Man man = new Man();
man.age = 32;
man.name = "张三“;
man.play();

看一看结果如何

C:\Users\xubin\Desktop\Java\MyProject\src\HelloWorld.java
Error:(9, 12) java: age 在 Man 中是 private 访问控制
Error:(10, 12) java: name 在 Man 中是 private 访问控制
Error:(11, 12) java: play() 在 Man 中是 private 访问控制

编译报错了,错误提示是 private 访问权限,外部对象禁止访问。

Getter 访问器与 Setter 修改器

Getter 访问器和 Setter 修改器是为private 修饰的类成员变量提供安全访问的一种方式

public class Man {
private int age;
private String name; public int getAge( ) { // Getter 访问器
return age;
}
public void setAge(int age) {// Setter 修改器
this.age = age;
}
}

使用 Getter 访问器与 Setter 修改器,如下:

Man man = new Man();
man.setAge(32);
System.out.println( man.getAge( ) );
Getter 访问器和 Setter 修改器的作用
  • 可以为 private 修饰的属性(或成员变量)提供统 一的外界访问通道

  • 可以为外界提供访问安全性(访问条件判断)

  • 可以在访问器中设置访问权限控制或管理(实现按权限级别访问内部数据)

总结

在面向对象编程中,我们需要考虑哪些成员变量或方法需要对外公开,提供给对象使用者(也就是 public);哪些成员变量或方法需要隐藏细节,禁止对象使用者访问(也就是 private)。

Java public 和 private 访问修饰符的更多相关文章

  1. Java 中的 protected 访问修饰符你真的了解吗?

    protected Java 中的 protected 访问修饰符 总结 在同一个包中,类中 protected 或 default 修饰的属性或方法可以在类外被其对象 (实例) 外部访问,也可以被子 ...

  2. Java面向对象入门(2)-访问修饰符

    Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...

  3. Java入门系列之访问修饰符作用范围

    前言 之前以为Java和C#中访问修饰符差不多一样,后面才了解到还是有些差异,本节只讲解学习Java中访问修饰符一些需要注意的地方或者从概念上不太好理解我们会通过实际例子来说明,若有错误之处,还请批评 ...

  4. JAVA 中的权限访问修饰符(public,protected,default,private )

    JAVA中有四个权限访问修饰符:public,protected,default,private 注意:这里讲的是对类中属性和方法的访问权限,并不是类的访问权限 1.default:包访问权限 如果什 ...

  5. java中四种访问修饰符

    Java中的四种访问修饰符:public.protected.default(无修饰符,默认).private. 四种修饰符可修饰的成分(类.方法.成员变量)   public protected d ...

  6. Java包、权限访问修饰符、封装性

    包 概念: 物理上是文件夹:逻辑上是有逻辑关系的类的集合 作用: 避免类重名:控制访问权限 命名规范: 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,如com,o ...

  7. Swift开发小技巧--private访问修饰符报错的情况

    1.Swift中的访问修饰符(三个,作用:用来修饰属性,方法和类) public : 最大权限 -- 可以在当前framework和其他framework中访问 internal : 默认的权限 -- ...

  8. 什么是封装? ----------------php中"public"类似的访问修饰符分别有什么作用?----什么是抽象?抽象的关键字以及用法----- 什么是接口?接口的关键字以及用法-------------

    什么是封装? ------------------------------------封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面.在使用时直接实例化该类的某一个方法,获 ...

  9. Java—匿名对象/内部类/访问修饰符/代码块

    匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Pers ...

随机推荐

  1. MySQL数据库高级一:架构介绍

    两天半就可以 严禁使用 精通 在简历上 了解的越多,越比他人有优势 linux的mysql需要使用中文字符集那么就要修改配置文件 1.mysql的linux版 安装和卸载不说了 2.逻辑架构 总体概况 ...

  2. 6.3string用法

    string类型可以大大方便对字符串的处理 1.string的定义 string str; string str="abcd"; 2.string中内容的访问 (1)可以像字符数组 ...

  3. WebGL之绘制三维地球

    通过Three.js也许可以很方便的展示出3D模型,但是你知道它是怎么一步一步从构建网格到贴图到最终渲染出3D模型的吗?现在我们直接使用底层的webgl加上一点点的数学知识就可以实现它. 本节实现的效 ...

  4. Python 语言特性:编译+解释、动态类型语言、动态语言

    1. 解释性语言和编译性语言 1.1 定义 1.2 Python 属于编译型还是解释型? 1.3 收获 2. 动态类型语言 2.1 定义 2.2 比较 2. 动态语言(动态编程语言) 3.1 定义 3 ...

  5. aws EKS

    登陆aws账号 1)找到eks 相关的项目,并进入 2)填写集群的名称,然后下一步 3)集群设置页面,添加集群服务角色 (aws eks cluster role) 4)继续集群配置 5)集群创建完成 ...

  6. 👰🏿‍♂️

    出于利益我便是绝对的利己主义者,凡事以自己为根本,以求自己利益最大化而不顾他人.社会.国家: 出于兴趣考我便希望全天下的人都好,都可爱,都不必受餐食无饱和居无定所的困苦,不必因感情的躁动而心情颠簸,因 ...

  7. Spring Cloud 微服务架构整理记录与示例首页

    ---------------------------目录-------------------------------- 一.SpringCloud系列组件实战(Eureka.Ribbon.Hyst ...

  8. php、jsp、asp和aspx的区别

    目录 PHP JSP ASP ASP.NET PHP PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地 ...

  9. 12.PHP_PDO数据库抽象层

    PDO数据库抽象层 其实也就是说,为了方便PHP项目各种数据库切换的方便以及代码兼容性,再各种数据库上又封装了一层,做成了统一的接口,方便数据库使用和切换. PDO链接mysql数据库: <?p ...

  10. 【mybatis】mybatis分页拦截器搭配bootstrap-table使用

    提前说明: 这一种方式已被我自己pass掉了,已经被新的方式迭代了.但是记录下自己曾经的成果还是有必要的,而且里面的思想还是不变的,另外技术不就是在不断地迭代中升级吗.千万不要想着一步完美,那样会让你 ...