封装

一、封装的概念

当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储范围的制约。但是除此之外,没有其他制约条件。但是,在实际问题中,我们需要给属性赋值加入额外的限制条件。这个给条件就不能在属性声明时体体现,我们只能通过方法进行限制的添加。(比如下图的setLeags)。同时,我们需要避免用户再使用“对象.属性”的方法对属性进行赋值。则需要将属性声明为私有的(private)
此时,针对于属性就体现了封装性

二、封装的方法

我们将类的属性私有化(private),同时,提供公共的(public)方法来获取(get)和设置(set)属性的值。

三、封装性的体现,需要权限修饰符来配合。

1、Java规定的4中权限(从小到大),private 缺省 default protected public。
2、4中权限可以用来修饰类及类的内部结构,属性,方法,构造器,内部类。
3、具体的。4中权限都可以用来修饰类的内部结构,属性,方法,构造器,内部类。
修饰类的话,只能使用缺省,public
总结封装性: Java提供了4中权限修饰符来修饰类及类的内部结构,体现了类及类的内部结构在被调用时的可见性的大小

四、练习

封装实例——宠物结婚
本实例实现判断两个宠物是否可以结婚,运用Java面向对象特征的封装性,对类进行封装。
【技术要点】
实现宠物结婚的技术要点如下:
定义一个宠物,包括名称、年龄、性别、配偶等基本属性。结婚必须满足三个条件:必须是异性,同性不允许结婚;有配偶者不能结婚;要达到结婚年龄方可结婚:雄性满5岁,雌性满4岁。
注意对方法进行封装 在Pet类中将方法进行创建和封装,在Test测试类中直接创建对象,调用Pet中的方法

pet类

public class Pet {private int age;private String name;private int sex;            //1为男性  0为女性private Pet spouse;         //配偶//添加有参构造方法public Pet(String name,int age,int sex,Pet spouse) {this.name = name;this.age = age;this.sex = sex;this.spouse = spouse;}//添加Set 和 Get方法public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public Pet getSpouse() {return spouse;}public void setSpouse(Pet spouse) {this.spouse = spouse;}//添加年龄判断方法public boolean isOverForMarry() {if (this.sex == 1 && this.getAge() >= 5) {      //雄性大于5岁return true;}if (this.sex == 0 && this.getAge() >= 4) {      //雌性大于4岁return true;}return false;}public boolean marry(Pet pet) {if (this.sex == pet.sex) {System.out.println("不符合规定,不允许同性结婚");return false;}if (this.spouse != null || pet.spouse != null) {System.out.println("一方已经结婚");return false;}if (!this.isOverForMarry() || !pet.isOverForMarry()) {System.out.println("未到达结婚年龄");return false;}System.out.println("恭喜"+this.name+"和"+pet.name+"结婚");//结婚成功  身份信息绑定this.spouse = pet;pet.spouse = this;return true;}
}

测试类

public class Test {public static void main(String[] args) {//创建实例化对象Pet pet1 = new Pet("Cat1",5,1,null);Pet pet2 = new Pet("Cat2",4,0,null);Pet pet3 = new Pet("Cat3",6,1,null);Pet pet4 = new Pet("Cat4",5,1,null);Pet pet5 = new Pet("Cat5",3,0,null);//直接调用在Pet类中封装的方法pet1.marry(pet2);           //pet1能否和pet2结婚pet2.marry(pet3);           //pet2能否和pet3结婚pet3.marry(pet4);pet4.marry(pet5);}
}

运行结果

一文读懂Java封装实例相关推荐

  1. JVM(一)一文读懂Java编译全过程

    一文读懂Java编译全过程 java代码首先要通过前端编译器编译成.class字节码文件,然后再按一定的规则加载到JVM(java 虚拟机)内运行,有三种运行方式,解释模式(javac).编译模式(C ...

  2. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  3. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  4. 一文读懂 Java 工程师学习路线!

    作者 | 三太子敖丙 来源 | 三太子敖丙(ID:NiceOffer) 在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们 ...

  5. 一文读懂Java泛型中的通配符 ?

    之前不太明白泛型中通配符"?"的含义,直到我在网上发现了Jakob Jenkov的一篇文章,觉得很不错,所以翻译过来,大家也可以点击文末左下角的阅读原文看英文版的原文. 下面是我的 ...

  6. 一文读懂 Java 字符串相关知识点和常见面试题

    点击上方"黄小斜",选择"置顶或者星标" 你关注的就是我关心的! 作者:黄小斜 来源:微信公众号[程序员黄小斜] 目录 string基础 Java String ...

  7. 一文读懂Java 11的ZGC为何如此高效

    导读:GC是大部分现代语言内置的特性,Java 11 新加入的ZGC号称可以达到10ms 以下的 GC 停顿,本文作者对这一新功能进行了深入解析.同时还对还对这一新功能带来的其他可能性做了展望.ZGC ...

  8. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  9. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

最新文章

  1. python做数据可视化的代码_Python数据可视化正态分布简单分析及实现代码
  2. MRI骨水肿是早期未分化关节炎演变为RA的独立预测预测因素
  3. 设为首页 加入收藏 html,[javascript]js设为首页和加入收藏夹代码
  4. echarts中x轴文件消失_实测实例:labview中波形图X轴刻度任意刻度设置
  5. Java中的继承:父类和子类的关系
  6. 设置Panel的布局管理器为BorderLayout,分别向其中的每个区域加入一个按钮
  7. 构造一个简单的linux系统
  8. 软考数据库系统工程师day01
  9. 【数据分析师---数据可视化】第二章:plotly绘图进阶篇(地图可视化,动态数据可视化)
  10. Unity热更之旧项目救星——Xlua热补丁修复
  11. 伏羲六十四卦+36D
  12. 观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识
  13. 马后炮之12306抢票工具(二) -- 联系人获取车次
  14. 基于共享单车轨迹的自行车道规划(读书笔记)
  15. 记录——kubeadm集群node节点加入
  16. 该死!辛苦制作的PDF文档被人随意传播,甚至还被拿去卖钱?
  17. 水平面上两直线垂直,且斜率都存在,分别为k1,k2,则k1·k2=-1
  18. python实现屏幕视频录制_Python实现屏幕录制功能的代码
  19. 使用PYTHON图像识别实现车牌号码识别
  20. libpng warning: iCCP: known incorrect sRGB profile 警告,问题解决

热门文章

  1. AI推理服务平台升级,阿里云机器学习PAI推出新规格
  2. 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 get-help about_signing
  3. cuda官网下载,本机显卡驱动与cuda、cudnn、pytorch、torchvision安装版本对应表,以及完全卸载CUDA方法
  4. EJB初探(二)为什么需要EJB
  5. Java打破双亲委派机制
  6. [图形学] 坐标系变换——从世界坐标系到相机坐标系
  7. CentOS 8 升级内核
  8. SecureCRT 工具的使用
  9. 启动牛市的密钥藏宝计划(TPC),火热来袭!
  10. 如何配置apache虚拟主机