Java自学笔记系列五:封装(一)

   今天晚饭后和51的博友聊天,谈到找“对象”这回事,谈了彼此的看法,关键点在于,爱情和婚姻在现实面前到底有多脆弱。结论都是题外话。

  现在的单身大龄男青年大多集中于IT等技术行业,是整天的加班还是整日忙在工作上没有时间呢?还是现在的人对这个行业有着某些偏见?

   但事实上,姑娘们,嫁给IT男吧,我们工资高,特别适合做经适男,性格好,会给你电脑杀毒,会帮你下电影,给你开发游戏,IT男有着闷骚的浪漫,我们会烧的一手好菜,我们一般没时间出轨,每天下了班不会泡吧,工资会老实上交…… 关键是,当我们给你买了房子,攒了你后半生的积蓄,(此处略去很多字),你就拥有了一大部分让旁人羡煞的财产……所以说,姑娘们,你们还等啥!

 

  言归正传,话说,java学习已经到了最核心的章节,面向对象的三大特性:封装,继承和多态。接下来会写多篇博文(数目不定,请关注近期博客吧!午饭们!)来总结这里面的每一个细节,小可很希望每一篇文章的阐述会给你带来一点启发,小可也是在学习的道路上摸索,也希望各位大牛给点指导性的建议。

 

还是先从下面的代码说起吧!

  
  
  
  
  1. package com.ivantian.CoreFengZhuang; 
  2.  
  3. import static java.lang.System.*; 
  4.  
  5. //  
  6. class Wife{ 
  7.  
  8.     private String name; 
  9.     private double hight; 
  10.     private double weight; 
  11.      
  12.     //构造函数 
  13.     Wife(String name,double hight,double weight){ 
  14.         this.name   = name; 
  15.         this.hight  = hight; 
  16.         this.weight = weight; 
  17.     } 
  18.      
  19.     public String getName() { 
  20.         return name; 
  21.     } 
  22.     public void setName(String name) { 
  23.         this.name = name; 
  24.     } 
  25.     public double getHight() { 
  26.         return hight; 
  27.     } 
  28.     public void setHight(double hight) { 
  29.         this.hight = hight; 
  30.     } 
  31.     public double getWeight() { 
  32.         return weight; 
  33.     } 
  34.     public void setWeight(double weight) { 
  35.         this.weight = weight; 
  36.     }    
  37.     // 
  38.     public void washClothes(){ 
  39.         out.println(this.getName()+" 给我洗衣服."); 
  40.     } 
  41.     // 
  42.     public void cookDinner(){ 
  43.         out.println(this.getName()+" 给我烧饭吃."); 
  44.     } 
  45.      
  46.     // 
  47.     public boolean beautiful(){ 
  48.          
  49.         if((this.hight<=180.00 && this.hight>=150.00)&&(this.weight<=180.00 && this.weight>=100.00)){ 
  50.             out.println(this.getName()+" is My favorite!"); 
  51.             return true
  52.         }else
  53.             out.println(this.getName()+" 不是我的菜."); 
  54.             return false
  55.         }    
  56.     } 
  57.  
  58.   
  59. public class FindWife { 
  60.      
  61.     public static void main(String[] args) { 
  62.          
  63.         //实例化三个奇女子 
  64.         Wife fengjie    = new Wife("凤姐",140.00,163.00); 
  65.         Wife furong     = new Wife("芙蓉姐姐",170.00,172.00); 
  66.         Wife xiaoyueyue = new Wife("小月月",200.00,156.00); 
  67.          
  68.         //凤姐能不能为你洗衣服? 
  69.         if(fengjie.beautiful()){ 
  70.             fengjie.washClothes(); 
  71.             fengjie.cookDinner(); 
  72.         } 
  73.         out.println("====================="); 
  74.         if(xiaoyueyue.beautiful()){ 
  75.             xiaoyueyue.washClothes(); 
  76.             xiaoyueyue.cookDinner(); 
  77.         } 
  78.          
  79.         //让小月月改变 
  80.         xiaoyueyue.setHight(160.00);//小月月增高成功 
  81.         xiaoyueyue.setWeight(160.00);//小月月成功减肥 
  82.         //小月月也成美女了 
  83.         out.println("====================="); 
  84.         if(xiaoyueyue.beautiful()){ 
  85.             xiaoyueyue.washClothes(); 
  86.             xiaoyueyue.cookDinner(); 
  87.         } 
  88.         //芙蓉姐姐 还不错 
  89.         out.println("====================="); 
  90.         if(furong.beautiful()){ 
  91.              furong.washClothes(); 
  92.              furong.cookDinner();        
  93.         } 
  94.     } 
  95. //输出结果如下: 
  96.  
  97. 凤姐 不是我的菜. 
  98. ===================== 
  99. 小月月 不是我的菜. 
  100. ===================== 
  101. 小月月 is My favorite! 
  102. 小月月 给我洗衣服. 
  103. 小月月 给我烧饭吃. 
  104. ===================== 
  105. 芙蓉姐姐 is My favorite! 
  106. 芙蓉姐姐 给我洗衣服. 
  107. 芙蓉姐姐 给我烧饭吃. 

 

  从上面的一个简单的事例代码看,你做了哪些封装?不难回答,类的私有数据(又叫做属性,就是说你要找老婆的基本特征,外貌等),当你找老婆的时候,无法直接操作她的身高,体重,年龄,只能通过方法beautiful()来判断,当然你不知道Wife类中还有那些私有数据,知道判断标准就足够了.

  所以说,封装的主要目的就是隐藏对象细节,将对象当做黑盒进行操作, 比如,有三个奇女子实例供我们选择,会调用Wife类的构造函数,但是并知道构造函数的细节,之后呢,你要判断奇女子那个更适合你,你就调用了beautiful()函数来判断,所以,要操作对象,一律得通过类提供的方法调用。

  private也可以用在方法和构造函数的声明上,私有方法或构造函数通常是类内部某个共享的演算的流程,外界不用知道私有方法的存在。

综上所述,小可可以认为有以下三种封装形式:

一,封装对象的初始流程

  构造函数,实现了对象初始化的封装。比如代码,如没有构造函数Wife(){},对的,函数名称和类的写法一样,只能是void类型,默认是public属性,可以为private(后面会专门一篇文章来谈构造函数的)。

private,public,还有一个protected 等权限修饰符会在后面的章节详细总结。

若是没有,你new一个“对象”的时候,要反反复复的将事例的属性写一篇,比较浪费代码空间,构造函数将类属性封装起来,一句就可以解决。如代码中:

如果不写构造函数的,在实例化对象的时候,JVM会默认创建一个没有参数的构造函数。

二,封装对象操作流程

  这里就不难理解了,函数或者称为行为,动作均可以,就是用来操作属性的。比如判断是不是美女的函数beautiful(),比如身高,体重在那个范围,三围在那个范围才算是MM,是西施还是东施……

再 如,你找到了老婆,调用了getName(),获得了美女的芳心,她便把自己的基本“属性信息”交给你了,她还可以帮你洗衣服,做晚餐等等,这些都是类Wife的“操作流程”。

  
  
  
  
  1. // 
  2.     public void washClothes(){ 
  3.         out.println(this.getName()+" 给我洗衣服."); 
  4.     } 
  5.     // 
  6.     public void cookDinner(){ 
  7.         out.println(this.getName()+" 给我烧饭吃."); 
  8.     } 
  9.      

三,封装对象内部数据

  因为Wife类的基本信息在你得到她的芳心之前,都是私有的,你是不知道的,但是她为了让你了解她,于是提供了取值方法(Getter),这样你便可以得到她的基本信息。保证了改奇女子信息的安全性。

  所以说,封装在某种程度上也保证了数据的安全。

  当然了,当你们在一起了,你可以让她减肥或者增高,当然要征得她同意,来满足你的视觉效果,Setter,当然private类型的数据还有它的访问范围(后面还会接着说),在同一个类中还是可以访问的。如例子中,手动来修改小月月童鞋的体重让她符合你的口味。

  
  
  
  
  1. //让小月月改变 
  2. xiaoyueyue.setHight(160.00);//小月月增高成功 
  3. xiaoyueyue.setWeight(160.00);//小月月成功减肥 

  封装的初步认识就到这里,虽然是初步,但封装的基本概念已经讲完了!

你可能感兴趣的:(面向对象,属性,封装,基础概念,行为)