Java面向对象的封装你了解吗
目录
- 面向对象思想之封装
- 什么是封装呢?
- 封装的好处意义
- getter方法和setter方法
- toString方法
- 总结:
面向对象思想之封装 【Java面向对象的封装你了解吗】或许大家都听说过java是纯面向对象语言,面向对象思想也就是我们常说的OOP,我们听说最多的思想就是继承,封装,多态,今天我们来讲一讲封装。
什么是封装呢?
封装就是一种将数据和操作数据的方法进行有机结合,一种函数抽象类的接口实现了对细节的封装和隐藏,使得我们只需要调用对外开放的公共接口去实现与对象的交互。我们可以把封装理解为一种保护的屏障,需要一些严格的接口进行控制,我们可以修改自己实现类的内部结构的代码,但是不可以修改那些公共接口。这就提供更好的安全性。
封装的好处意义
- 好的封装能够减少耦合度
- 能够对成员变量更精准的控制
- 实现对细节的封装和隐藏,使得更具有安全性。
- 可以修改类的内部代码,不用修改那些公共的接口
回忆一下我们见过哪些访问修饰限定符呢?有public ,还有成员变量什么也不加的默认权限英文是default,还有就是我们今天要讲解的private,下一篇文章会讲解protected。
那private到底有什么用处呢?
我们在来回忆一下上篇文章讲过的类和对象,下面我会创建一个学生类。
//创建一个学生类class Student {public String name; //学生姓名public int age; //学生年龄public String sex; //学生性别public double score; //学生分数public void sleep() {System.out.println("我要睡觉了!!!"); }public void eat() {System.out.println("我要干饭了!!!"); }public void exam() {System.out.println("我要考试了!!!"); }}public class TestDemo {public static void main(String[] args) {Student student = new Student(); //利用new关键字实例化一个对象student.age = 19; student.name = "厚积薄发"; student.score = 99.9; student.sex = "男"; }}
以上的代码我们将这个学生成员变量分别赋值。这样写会不会有什么不足呢?
想一想,如果我们每次要定义一个学生对象,每次都要这样赋值会不会有点太麻烦?今天我们讲到封装就会让它更简单一些。请看下面代码:
class Student {private String name; //学生姓名private int age; //学生年龄private String sex; //学生性别private double score; //学生分数public String getName() {return name; }public void setName(String name) {this.name = name; }}public class TestDemo {public static void main(String[] args) {Student student = new Student(); student.setName("厚积薄发"); System.out.println(student.getName()); }}
根据封装的概念我是不是可以给它封装成一个公共的接口然后调用。
好接下来分析一下这个代码:
文章图片
文章图片
文章图片
所以,我们在成员变量前面加上private修饰使得成员变量只能在类的内部访问,不能在类的外部访问,然后我们实现了setName getName方法,调用者两个接口就可以进行初始化和返回值操作,更好地体现了封装性。
getter方法和setter方法 为了更方便的调用这些接口,IDEA会为我们提供了这些接口,我们通常情况下把这些方法叫做getter方法和setter方法。只要我们需要我们就可以调用这些共有的getter方法和setter方法。
IDEA快捷键:Alt + insert
文章图片
class Student {private String name; //学生姓名private int age; //学生年龄private String sex; //学生性别private double score; //学生分数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 String getSex() {return sex; }public void setSex(String sex) {this.sex = sex; }public double getScore() {return score; }public void setScore(double score) {this.score = score; }public void sleep() {System.out.println("我要睡觉了!!!"); }public void eat() {System.out.println("我要干饭了!!!"); }public void exam() {System.out.println("我要考试了!!!"); }}public class TestDemo {public static void main(String[] args) {Student student = new Student(); //利用new关键字实例化一个对象student.setName("厚积薄发"); student.setAge(19); student.setScore(99.9); student.setSex("male"); System.out.println(student.getName()); System.out.println(student.getAge()); System.out.println(student.getScore()); System.out.println(student.getSex()); }}
toString方法 此外,我们每个成员变量都要自己实现一遍打印操作,没错IDEA编译器又为我们提供了一个方法,这个方法叫做toString方法,快捷键是 Alt +insert然后选择toString方法。
文章图片
我们直接打印对象的引用就可以调用toString方法.
有同学就会问为什么呢?
这就得需要我们看一看println的源码是怎么实现的了。
我们按住ctrl 点进println这个方法
文章图片
我们通过源码就可以发现,println会调用toString方法,如果定义了toString方法,那他就调用toString方法,如果没有调用他就会打印:
文章图片
eg:
文章图片
快捷键: Alt + insert选择constructor
文章图片
总结: private关键字:利用private修饰的成员变量和方法只能在本类中访问,如果在外部访问可以调用公有的setter方法和getter方法。
封装的优点:减少代码的耦合性, 可以自由修改自己的内部类,不用修改公有地接口 ,隐藏信息实现细节,更精准的控制成员变量。
要记住并且运用并且调用这些公共的接口:getter方法和setter方法 还有toString方法以及 构造方法。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- Java9新特性中的模块化详解
- Java锁(二)(AbstractQueuedSynchronizer、ReentrantLock详解)
- Java|第1节 MySQL 架构篇 2021-12-24
- 面试技巧|2021 java面试题目(持续更新...)
- 对象、数组、函数等多种数据类型的深浅克隆(拷贝)
- JavaWeb|JavaWeb——【Response】——一篇文章学会Respose,值得你一看!
- java|分享Java代码的一些小建议,脱离小白——学会优化代码50个方案
- java实现分布式项目搭建
- JavaSE的逻辑控制你了解吗
- java底层JDK|java底层JDK Logging日志模块处理细节深入分析