1.1封装的基础实现。
        封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
    1.2封装的作用
        ① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
        ②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

/*封装性   说的是 安全性 不让外部对象直接调用或者是修改
  需要解决的是 把属性保护起来 JAVA 关键字 private  
  但是 太安全了  外部无法访问  
  如想现在需要通过对象操作类中的属性在java 中有个要求 可以使用 setter,getter 设置或 取得属性
  以public String name 封装为例
    设置属性 public void setName(String n):  名称 要首字母大写
    取得属性 public void getName():    
*/

// 以后只要是类中的属性全部都要使用private 封装 封装后的是属性必须按照要求编写 setter,getter 方法

class Person { //现在定义一个类
//定义类中的两个属性
private String name; // 表示人的姓名
private int age; // 表示人的年龄
public void tell(){
System.out.println("姓名:" + name +"年龄:" + age);
}
public void setName(String n){
name = n;
}
public void getName(){
return name;
}
public void setAge(int a){
if(a >= 0&&a <= 100){
age = a;
}
}
public void getAge(){
return age;
}
}
public class T{// 另一个类
public static void main (String args[]){
Person per = new Person();
per.setName("少爷"+"\n");
per.setAge(-3);
per.tell();
}
}

/*  private 声明的属性只能够被类的内部做访问
    private 声明的属性必须有对应的 setter,getter 方法
*/

>>>
    在JAVA中所有面向对象的概念都是以类与对象的关系为主的。那么下面通过一个具体的程序来研究一下,为什么需要有封装性。
    范例:观察如下程序代码

class Person { //现在定义一个类
//定义类中的两个属性
String name: // 表示人的姓名
int age: // 表示人的年龄
public void tell(){
system.out.println("姓名:" + name +"年龄:" + age):
}
}
public class T{// 另一个类
public static void main (String args[]){
Person per = new Person():
per.neme = "少爷":
per.age = -30:
per.tell():
}
}
// 姓名:少爷,年龄:-30

现在的代码没有语法错误,但是从显示的角度来讲,这个代码是有错误的,而且问题严重。这样的错误严格来讲就属于业务错误。那么造成这种出错的原因是什么?
        最大的错误在于当前类中的属性可以直接被类外部的对象调用。所以,此时就认为这样的操作属于不安全的操作
    那么现在最需要解决的问题设计将内部的属性保护起来,即,不让外部直接操作。为此在JAVA中提供有一个 private 关键字,利用此关键字可以实现封装。

    加入 private 之后,就表示此时 name 与 age 两个属性只能够被person类访问。
    范例;错误调用

    现在发现,使用了private 定义的属性,类的外部不能够直接进行访问了,所以安全性是最高的
    那么如果现在需要通过对象操作类中的属性,那么JAVA 中就有了一个明确额要求:可以使用 setter,getter 方法设置或取得封装内容,以 privare String name 封装属性为例:
        设置数据:public void setName(String n );
        取得数据:public String getName();
    以 private int age ;封装属性为例:
        设置数据:public void setAge(int a);
        取得数据:public int getAge();
    范例:修改程序,使得外部可以访问私有属性

    开发原则:以后只要是类中的属性全部使用 private 封装,封装后的属性必须严格按照要求编写 setter,getter 方法,不管当前代码是否调用了 getter,必须提供
    如果非要进行一些检测操作,则可以修改 setter 方法(只是现在临时说明)



// 姓名:哪吒,年龄:0

/*  private 声明的属性只能够被类的内部做访问
        private 声明的属性必须有对应的 setter,getter 方法
    */

>>>>>
    private 声明的属性只能够被类的内部所访问;
    private 声明的属性必须有对应的 setter,getter 方法,而且方法名称要求按照严格标准编写

---------------------------------------------

封装的简单例子:
先来个例子看看;

public class Man{
//对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性
private String name;
private int age;
private Woman wife;
//对该人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄
  // 方法封装
  public void setWife(Woman wife){
   this.wife = wife;
  }
  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 class Woman{
  // 属性封装
  private String name;
  private int age;
  private Man husband;
  // 方法封装
  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 Man getHusband(){
   return husband;
  }
  public void setHusband(Man husband){
   this.husband = husband;
  }
}

/**
仔细看就会发现,Man类没有提供getWife的方法,这是因为男人不想让自己的妻子被外界访问,接下来呢,就是封装可以把一个对象的属性私有,而提供一些可以被外界访问的属性的方法,比如说,name属性,Man和Woman类都有相应的get和set方法,外界都可以通过这些方法访问和修改。同时对一些对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法。外界是不能得到Man类的wife属性的
*/
上面那例子可能没有突出封装的好处,下面来个超简单的表达下:

public class Show{
public static void show(String str){
System.out.println(str);
}
}

上面就是对 System.out.println();的封装。
调用的时候 :

public class Use{
public static void main(String[] args){
Show.show("封装");
}
}

这样用的时候就不用使:System.out.println("封装");

菜鸡的Java笔记 第十一 - java 封装性的更多相关文章

  1. 【Java笔记】配置文件java.util.Properties类的使用

    配置文件的路径:项目名/src/main/resources/mmall.properties mmall.properties的内容是键值对.例如假设写了ftp服务器的一些信息. ftp.serve ...

  2. Java笔记12:Java对象排序

    代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...

  3. [改善Java代码]使用静态内部类提高封装性

    建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...

  4. 菜鸡的Java笔记 第二十一 final 关键字

    使用final定义类,属性,方法            final在一些书中被称为终结器,意思是:利用final定义的类不能够有子类,利用final定义的方法不能够被覆写,利用final定义的变量就成 ...

  5. 菜鸡的Java笔记 第二十三 - java 抽象类的概念

    abstractClass 抽象类的概念        1.抽象类的基本定义        2.抽象类的使用原则                不会抽象类与接口,java = 没学           ...

  6. 菜鸡的Java笔记 第八 - java 面向对象

    面向对象的特点以及开发过程.    java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程    如果要想更简单的去理解面向过 ...

  7. 菜鸡的Java笔记 第七 - java 数组

    数组的基本概念     笔试中经常出现的试题或是问题    1.1 概念        数组指的是一组相关变量的集合         如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...

  8. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...

  9. 菜鸡的Java笔记 第五 - java 程序逻辑控制

    程序主要分为三种逻辑:顺序,分支,循环. if 分支语句 if分支语句是最为基础的分支操作,但是其有三种使用形式: if语句 if.....else   语句 if....else...if...el ...

随机推荐

  1. centos8安装MySQL8——通过yum

    centos8上通过yum安装MySQL,过程简单,不易出错 1.检查系统是否已安装MySQL相关,如果有则全部清除干净 #列出MySQL相关的安装包 rpm -qa | grep mysql #依次 ...

  2. 20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测

    作者 | 江昱 前言 图像分类是人工智能领域的一个热门话题.通俗解释就是,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法. 它利用计算机对图像进行定量分析,把图像或图像中 ...

  3. Serverless 对研发效能的变革和创新

    作者 | 杨皓然(不瞋) 对企业而言,Serverless 架构有着巨大的应用潜力.随着云产品的完善,产品的集成和被集成能力的加强,软件交付流程自动化能力的提高,我们相信在 Serverless 架构 ...

  4. Python简单爬取图书信息及入库

    课堂上老师布置了一个作业,如下图所示: 就是简单写一个借书系统. 大概想了一下流程,登录-->验证登录信息-->登录成功跳转借书界面-->可查看自己的借阅书籍以及数量... 登录可以 ...

  5. 题解 Hero meet devil

    题目传送门 题目大意 给出一个长度为 \(n\) 的字符串,对于每个 \(k\in [0,n]\),求出有多少个长度为 \(m\) 的字符串满足两者最长公共子序列长度为 \(k\). \(n\le 1 ...

  6. Tomcat 源码环境搭建

    Tomcat 源码搭建 下载源码 下载地址 :https://tomcat.apache.org/download-80.cgi#8.5.35 下载之后解压缩 导入Idea 添加pom.xml文件 & ...

  7. 网页常用的css特效让互动留住客户

    一般网站如果制作按钮,多做一些互动,可以让客户获得更好的体验. 例如鼠标滑过按钮,让背景颜色从左往右滑出来(或者从右往左都可以): <a target="_blank" hr ...

  8. SharkCTF2021 fastcalc题记

    web --> python脚本编写练习. 直接访问发现全是乱码: 看包发现Content-Type里面没有charset=utf-8. 于是用python访问一下,用.encoding='ut ...

  9. leetcode 5/300 最长回文子串 py

    目录 题目说明 方法一:动态规划--状态转移方程 方法二:优化中心扩展算法 题目说明 要看明白求得是什么,最长回文字串是指例如cababa中ababa是最长的,不是求回文的部分aba 方法一:动态规划 ...

  10. [对对子队]测试报告Beta

    一.测试中发现的bug BETA阶段的新bug 描述 提出者(可能需要发现者在会议上复现) 处理人 是否解决 第四关中工作区的循环语句拖动到组件区后成本的大小比原来不一样的问题 梁河览 何瑞 是 循环 ...