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. Java(一)——基础知识

    引言 之前一直对 Java 怀有固执的偏见,以为 Java 是编写前端的语言,作为一个机械生,非常抗拒去学它. 但是最近接触一点以后,完全改观了先前的看法,于是开启了对 Java 的大学习. 一.数据 ...

  2. 【C++ Primer Plus】编程练习答案——第2章

    1 void ch2_1() { 2 using namespace std; 3 cout << "xxxxxxxx" << endl; 4 } 5 6 ...

  3. 浅析 Java 内存模型

    文章转载于 飞天小牛肉 的 <「跬步千里」详解 Java 内存模型与原子性.可见性.有序性>.<JMM 最最最核心的概念:Happens-before 原则> 1. 为什么要学 ...

  4. C++面向行输入:get()与getline()

    面向行的输入:get()与getline() 引入: char a = 's';//这样的语句合法 char b = "s";//不合法 /* "S"不是字符常 ...

  5. Spring的JDK动态代理如何实现的(源码解析)

    前言 上一篇文章中提到了SpringAOP是如何决断使用哪种动态代理方式的,本文接上文讲解SpringAOP的JDK动态代理是如何实现的.SpringAOP的实现其实也是使用了Proxy和Invoca ...

  6. FastAPI 学习之路(三十七)元数据和文档 URL

    你可以在 FastAPI 应用中自定义几个元数据配置. 你可以设定: Title:在 OpenAPI 和自动 API 文档用户界面中作为 API 的标题/名称使用. Description:在 Ope ...

  7. javascript-jquery插件

    1.jquery创建插件 jQuery.extend({插件名:函数体,插件名:函数体}): html部分 <div id="div1">开始动画</div> ...

  8. 6月2日 Scrum Meeting

    日期:2021年6月2日 会议主要内容概述: 取消账单类别自定义 图表属性分析取消函数输入 增加新的主题模板 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇 ...

  9. Scrum Meeting 0423

    零.说明 日期:2021-4-23 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成引导页UI# ...

  10. [no_code][Beta] 中期组内总结

    $( "#cnblogs_post_body" ).catalog() 目前scrum meeting beta阶段目前共7次.在alpha阶段我们博客发布时间比较匆忙,是扣分项, ...