今天晚饭后和51的博友聊天,谈到找“对象”这回事,谈了彼此的看法,关键点在于,爱情和婚姻在现实面前到底有多脆弱。结论都是题外话。
现在的单身大龄男青年大多集中于IT等技术行业,是整天的加班还是整日忙在工作上没有时间呢?还是现在的人对这个行业有着某些偏见?
但事实上,姑娘们,嫁给IT男吧,我们工资高,特别适合做经适男,性格好,会给你电脑杀毒,会帮你下电影,给你开发游戏,IT男有着闷骚的浪漫,我们会烧的一手好菜,我们一般没时间出轨,每天下了班不会泡吧,工资会老实上交…… 关键是,当我们给你买了房子,攒了你后半生的积蓄,(此处略去很多字),你就拥有了一大部分让旁人羡煞的财产……所以说,姑娘们,你们还等啥!
言归正传,话说,java学习已经到了最核心的章节,面向对象的三大特性:封装,继承和多态。接下来会写多篇博文(数目不定,请关注近期博客吧!午饭们!)来总结这里面的每一个细节,小可很希望每一篇文章的阐述会给你带来一点启发,小可也是在学习的道路上摸索,也希望各位大牛给点指导性的建议。
还是先从下面的代码说起吧!
- package com.ivantian.CoreFengZhuang;
- import static java.lang.System.*;
- //
- class Wife{
- private String name;
- private double hight;
- private double weight;
- //构造函数
- Wife(String name,double hight,double weight){
- this.name = name;
- this.hight = hight;
- this.weight = weight;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public double getHight() {
- return hight;
- }
- public void setHight(double hight) {
- this.hight = hight;
- }
- public double getWeight() {
- return weight;
- }
- public void setWeight(double weight) {
- this.weight = weight;
- }
- //
- public void washClothes(){
- out.println(this.getName()+" 给我洗衣服.");
- }
- //
- public void cookDinner(){
- out.println(this.getName()+" 给我烧饭吃.");
- }
- //
- public boolean beautiful(){
- if((this.hight<=180.00 && this.hight>=150.00)&&(this.weight<=180.00 && this.weight>=100.00)){
- out.println(this.getName()+" is My favorite!");
- return true;
- }else{
- out.println(this.getName()+" 不是我的菜.");
- return false;
- }
- }
- }
- public class FindWife {
- public static void main(String[] args) {
- //实例化三个奇女子
- Wife fengjie = new Wife("凤姐",140.00,163.00);
- Wife furong = new Wife("芙蓉姐姐",170.00,172.00);
- Wife xiaoyueyue = new Wife("小月月",200.00,156.00);
- //凤姐能不能为你洗衣服?
- if(fengjie.beautiful()){
- fengjie.washClothes();
- fengjie.cookDinner();
- }
- out.println("=====================");
- if(xiaoyueyue.beautiful()){
- xiaoyueyue.washClothes();
- xiaoyueyue.cookDinner();
- }
- //让小月月改变
- xiaoyueyue.setHight(160.00);//小月月增高成功
- xiaoyueyue.setWeight(160.00);//小月月成功减肥
- //小月月也成美女了
- out.println("=====================");
- if(xiaoyueyue.beautiful()){
- xiaoyueyue.washClothes();
- xiaoyueyue.cookDinner();
- }
- //芙蓉姐姐 还不错
- out.println("=====================");
- if(furong.beautiful()){
- furong.washClothes();
- furong.cookDinner();
- }
- }
- }
- //输出结果如下:
- 凤姐 不是我的菜.
- =====================
- 小月月 不是我的菜.
- =====================
- 小月月 is My favorite!
- 小月月 给我洗衣服.
- 小月月 给我烧饭吃.
- =====================
- 芙蓉姐姐 is My favorite!
- 芙蓉姐姐 给我洗衣服.
- 芙蓉姐姐 给我烧饭吃.
从上面的一个简单的事例代码看,你做了哪些封装?不难回答,类的私有数据(又叫做属性,就是说你要找老婆的基本特征,外貌等),当你找老婆的时候,无法直接操作她的身高,体重,年龄,只能通过方法beautiful()来判断,当然你不知道Wife类中还有那些私有数据,知道判断标准就足够了.
所以说,封装的主要目的就是隐藏对象细节,将对象当做黑盒进行操作, 比如,有三个奇女子实例供我们选择,会调用Wife类的构造函数,但是并知道构造函数的细节,之后呢,你要判断奇女子那个更适合你,你就调用了beautiful()函数来判断,所以,要操作对象,一律得通过类提供的方法调用。
private也可以用在方法和构造函数的声明上,私有方法或构造函数通常是类内部某个共享的演算的流程,外界不用知道私有方法的存在。
综上所述,小可可以认为有以下三种封装形式:
一,封装对象的初始流程
构造函数,实现了对象初始化的封装。比如代码,如没有构造函数Wife(){},对的,函数名称和类的写法一样,只能是void类型,默认是public属性,可以为private(后面会专门一篇文章来谈构造函数的)。
【private,public,还有一个protected 等权限修饰符会在后面的章节详细总结。】
若是没有,你new一个“对象”的时候,要反反复复的将事例的属性写一篇,比较浪费代码空间,构造函数将类属性封装起来,一句就可以解决。如代码中:
如果不写构造函数的,在实例化对象的时候,JVM会默认创建一个没有参数的构造函数。
二,封装对象操作流程
这里就不难理解了,函数或者称为行为,动作均可以,就是用来操作属性的。比如判断是不是美女的函数beautiful(),比如身高,体重在那个范围,三围在那个范围才算是MM,是西施还是东施……
再 如,你找到了老婆,调用了getName(),获得了美女的芳心,她便把自己的基本“属性信息”交给你了,她还可以帮你洗衣服,做晚餐等等,这些都是类Wife的“操作流程”。
- //
- public void washClothes(){
- out.println(this.getName()+" 给我洗衣服.");
- }
- //
- public void cookDinner(){
- out.println(this.getName()+" 给我烧饭吃.");
- }
三,封装对象内部数据
因为Wife类的基本信息在你得到她的芳心之前,都是私有的,你是不知道的,但是她为了让你了解她,于是提供了取值方法(Getter),这样你便可以得到她的基本信息。保证了改奇女子信息的安全性。
所以说,封装在某种程度上也保证了数据的安全。
当然了,当你们在一起了,你可以让她减肥或者增高,当然要征得她同意,来满足你的视觉效果,Setter,当然private类型的数据还有它的访问范围(后面还会接着说),在同一个类中还是可以访问的。如例子中,手动来修改小月月童鞋的体重让她符合你的口味。
- //让小月月改变
- xiaoyueyue.setHight(160.00);//小月月增高成功
- xiaoyueyue.setWeight(160.00);//小月月成功减肥
封装的初步认识就到这里,虽然是初步,但封装的基本概念已经讲完了!