Java面向对象的封装你了解吗

 更新时间:2022年03月28日 14:39:21   作者:厚积薄发ض  
这篇文章主要为大家详细介绍了Java面向对象的封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

面向对象思想之封装

或许大家都听说过java是纯面向对象语言,面向对象思想也就是我们常说的OOP,我们听说最多的思想就是继承,封装,多态,今天我们来讲一讲封装。

什么是封装呢?

封装就是一种将数据和操作数据的方法进行有机结合,一种函数抽象类的接口实现了对细节的封装和隐藏,使得我们只需要调用对外开放的公共接口去实现与对象的交互。我们可以把封装理解为一种保护的屏障,需要一些严格的接口进行控制,我们可以修改自己实现类的内部结构的代码,但是不可以修改那些公共接口。这就提供更好的安全性。

封装的好处意义

  • 好的封装能够减少耦合度
  • 能够对成员变量更精准的控制
  • 实现对细节的封装和隐藏,使得更具有安全性。
  • 可以修改类的内部代码,不用修改那些公共的接口

讲到封装那必然讲到关键字private也就是访问修饰限定符。

回忆一下我们见过哪些访问修饰限定符呢?有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方法以及 构造方法。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容! 

相关文章

  • Hystrix Turbine聚合监控的实现详解

    Hystrix Turbine聚合监控的实现详解

    微服务架构下,⼀个微服务往往部署多个实例,如果每次只能查看单个实例的监控,就需要经常切换很不⽅便,在这样的场景下,我们可以使⽤ Hystrix Turbine 进⾏聚合监控,它可以把相关微服务的监控数据聚合在⼀起,便于查看
    2022-09-09
  • Java实现图片旋转、指定图像大小和水平翻转

    Java实现图片旋转、指定图像大小和水平翻转

    这篇文章主要为大家详细介绍了Java实现图像旋转,指定图像大小,水平翻转图像,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Java servlet 使用 PrintWriter 时的编码与乱码的示例代码

    Java servlet 使用 PrintWriter 时的编码与乱码的示例代码

    本篇文章主要介绍了Java servlet 使用 PrintWriter 时的编码与乱码的示例代码,探讨了 PrintWriter 的缺省编码与普通字符流的缺省编码的差异,具有一定的参考价值,有兴趣的可以了解一下
    2017-11-11
  • springboot断言异常封装与统一异常处理实现代码

    springboot断言异常封装与统一异常处理实现代码

    异常处理其实一直都是项目开发中的大头,但关注异常处理的人一直都特别少,下面这篇文章主要给大家介绍了关于springboot断言异常封装与统一异常处理的相关资料,需要的朋友可以参考下
    2023-01-01
  • Java中CopyOnWriteArrayList的使用解析

    Java中CopyOnWriteArrayList的使用解析

    这篇文章主要介绍了Java中CopyOnWriteArrayList的使用解析,CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存,它不存在扩容的概念,每次写操作都要复制一个副本,在副本的基础上修改后改变Array引用,需要的朋友可以参考下
    2023-12-12
  • Springmvc获取前台请求数据过程解析

    Springmvc获取前台请求数据过程解析

    这篇文章主要介绍了Springmvc获取前台请求数据过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 一文读懂JAVA中HttpURLConnection的用法

    一文读懂JAVA中HttpURLConnection的用法

    这篇文章主要介绍了JAVA中的HttpURLConnection用法,文中讲解非常细致,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • java中计算字符串长度的方法及u4E00与u9FBB的认识

    java中计算字符串长度的方法及u4E00与u9FBB的认识

    字符串采用unicode编码的方式时,计算字符串长度的方法找出UNICODE编码中的汉字的代表的范围“\u4E00” 到“\u9FBB”之间感兴趣的朋友可以参考本文,或许对你有所帮助
    2013-01-01
  • 一文带你了解Java万物之基之Object类

    一文带你了解Java万物之基之Object类

    Java是一门天然的面向对象的语言。而所有我们手动创造出来的类,都继承于同一个类,即Object类。本文将通过示例为大家详细介绍一下Java中的Object类,需要的可以参考一下
    2022-03-03
  • java 单播、广播、组播详解及实例代码

    java 单播、广播、组播详解及实例代码

    这篇文章主要介绍了java 单播、广播、组播详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02

最新评论