首页 > 其他分享 >面向对象三大特性之封装

面向对象三大特性之封装

时间:2022-10-23 14:33:07浏览次数:95  
标签:封装 String private sex 面向对象 public 三大 name

封装的概述

封装应该有两个含义,一是把对象的属性和行为看成一个密不可分的整体,将两者封装在对象中。另一层含义是“信息屏蔽”,把不需要外界知道的信息隐藏起来,有些对象的属性和行为允许外界使用但不允许更改,而有些对象的属性和行为允许外界知道也允许外界更改,但尽量屏蔽对象功能的实现细节

使用封装有三大好处:

     1、良好的封装能够减少耦合。

     2、类内部的结构可以自由修改。

     3、可以对成员进行更精确的控制。

     4、隐藏信息,实现细节。

举例说明屏蔽细节

  • 举例1

外界在设置性别的时候只知道输入0表示男性,非0表示女性,而不知道具体的实现细节

  • 举例2



属性被封装,外界直接不可见,不可以直接访问

如果直接这样封装就和外界断绝了连续,这样也就没有什么实际意义了,所以我们可以在封装的基础上给对象提供和外界交流的通道

通道由公有的getter 和setter方法组成

不封装的坏处举例


可以看成如果不封装的话年龄这个属性可能会被设置成不合理的数值,导致逻辑错误,但这并没有语法错误,编译器并不会报错

封装并提供getter 和setter方法


在入口处设置setter方法可以把握设置的的数据的合理性,避免的前面的错误

对getter 和setter方法的作用的进一步理解

public class Husband {
    
    /*
     * 对属性的封装
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性
     */
    private String name ;
    private String sex ;
    private int age ;
    private Wife wife;
    
    /*
     * setter()、getter()是该对象对外开发的接口
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setWife(Wife wife) {
        this.wife = wife;
    }
}
public class Wife {
    private String name;
    private int age;
    private String sex;
    private Husband husband;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setHusband(Husband husband) {
        this.husband = husband;
    }

    public Husband getHusband() {
        return husband;
    }
    
}

封装步骤的完善

前面阐述了封装的一些过程,用private关键字修饰和用getter和setter方法设置访问出口,但其实还不够完善
在一个类中,在进行属性值的设置,其实官方就给我们提供了专用的构造方法(也叫构造器),当我们将构造方法和我们的封装结合起来才是最完善的封装

总结
在以后的开发过程中只有是编写类中的属性一定要用private进行封装,private封装的属性必须提供相应的getter和setter方法,即便是当前程序中没有调用全部的方法,但作为一个标准的封装,这些都要写出来

参考:

《java开发实战经典》

标签:封装,String,private,sex,面向对象,public,三大,name
From: https://www.cnblogs.com/swtaa/p/16818430.html

相关文章

  • 面向对象的三个基本特征?-小白妹
    面向对象的三个基本特征是:封装、继承和多态。继承:让某个类型的对象获得另一个类型的对象的属性的方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例......
  • 封装一个简单的乐观锁方法 -基于Laravel 8
    在模型文件中写入以下代码:/***@function实现一个简单的laravel乐观锁*@returnint受影响的函数*@othervoid*/publicfuncti......
  • 面向对象
    三大特性封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对......
  • 面向对象三大特性
    继承:一般类只能单继承,内部类实现多继承,接口可以多继承封装:访问权限控制public>protected>包>private内部类也是一种封装多态:编译时多态,体现在向上转型和向下转型,通过......
  • 回顾缓存穿透、缓存雪崩、缓存击穿及封装Redis工具类
    缓存穿透问题的解决思路缓存穿透:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。常见的解决方案有两种:缓存......
  • C++ 核心 4.1 类的封装
    4类和对象面向对象三大特性:封装、继承、多态万物皆对象。对象=属性+行为类是抽象的对象。比如路上有很多(具体的)车,但抽象出来都属于车。定义类的语法:class类名{......
  • 面向对象程序设计八大原则
    1.单一职责原则(SingleResponsibilityPrinciple)   每一个类应该专注于做一件事情。2.里氏替换原则(LiskovSubstitutionPrinciple)    超类存在的地......
  • 前端js的数据纯前端分页通用方法封装
    用elementui分页组件的话可以直接用这个函数将拿到的总的数据缓存起来,然后分别在切换页数,翻页的时候调用这个方法既可/***前端分页,不再次请求接口,不破坏原数组list......
  • 直播网站源码,React中的三大实例之ref的三种形式
    直播网站源码,React中的三大实例之ref的三种形式ref有三种形式:字符串形式回调函数形式CreateRef形式如下示例代码展示了三种形式ref的创建于使用 <!DOCTYPEhtml><......
  • pybullet实现SlideBar的封装,任何机械臂可直接调用API完成SlideBars控制
    我将文章发表在了古月居,一起来看看吧!​......