黑马程序员_java面向地象-封装

来源:互联网 发布:jsp点击按钮删除数据 编辑:程序博客网 时间:2024/06/10 15:56
------- android培训、java培训、期待与您交流! ----------

黑马程序员——面象对象特性——封装

面向对象程序设计是java编程中最重要的思想,他指导程序员以对象的方式去考虑问题,从而让程序的各个模块之间松耦,让我们编写的程序提高可扩展性,可读性,可维户性等等。

     Java面向对象的特性有封装,继承,多态。这是面向对象的三大特性。

一、  封装。

(1)         封装就是对客观存在的事物封装成抽象,并对外公开其公供方法,提供给可信的类和对象调用,对不可信的调用者进行信息隐藏。

(2)         Java类中成员的修饰符有Publicprotected<default>private

例如:

代码一:

//人是一个对象,电脑也是一个对象等,每个对象它都有它自大的属性,如:电脑,什么品牌,什么颜色,有什么功,显示器是什么类型的等等。

class person

{

      String name=null;

      int age=0;

      public person(String name,int age)

      {

            this.name=name;

            this.age=age;

      }

      public void speek()

      {

            System.out.println("我的名字是:"+name+"我的字年龄是:"+age);

      }

}

class client

{

 public static void main(String[] args)

 {

      person p=new person("张三",12);

      p.speek();

 }

}

运行结果为:

代码二:如查我在场景类里传一个-10看看双乍样呢?

 

class client

{

 public static void main(String[] args)

 {

      person p=new person("张三",-10);

      p.speek();

 }

}

运行结为:

代码三:再如果我传一个非学大的数字如:1000

 class client

{

 public static void main(String[] args)

 {

      person p=new person("张三",1000);

      p.speek();

 }

}

     运行结果为:

看一下代码二和代码三,运行结果完全不符合现实的逻辑。一个人的年龄不可能是负数,也不可能活得一1000年。代码设计有问题,那怎么改呢,如下:

代码四:我们在类的构造器中进行判断,如果给定的年龄符合常理,才行,否则告知调用者。如下:

     class person

{

          String name=null;

          int age=0;

          public person(String name,int age)

          {

                this.name=name;

                if(age>=0&&age<=130)

                {

                     this.age=age;

                }

                else

                {

                     System.out.println("给定的年龄不合法");

                }

          }

          public void speek()

          {

                if(age>0&&age<130)

                     System.out.println("我的名字是:"+name+"我的字年龄是:"+age);

                else if(age==0)

                     System.out.println("刚出生年领太小只会哭——啊啊啊啊啊啊啊啊啊啊啊啊啊啊");      }

}

class client

{

     public static void main(String[] args)

     {

          person p=new person("张三",-10);

          p.speek();

     }

}

     

代码五:给人这个对象传进1000,代码如下:

     class client

{

           public static void main(String[] args)

           {

                person p=new person("张三",1000);

                p.speek();

           }

}

     运行结果:

代码六:在创建对象时传入的参数在0130时,这是一个符合常理的年龄段,如下:

        class client

{

        public static void main(String[] args)

        {

          person p=new person("张三",0);

          p.speek();

person p1=new person("张三",10);

          p1.speek();

 

        }

}

运行结果:

        

        

通过对代码进行判断之后,得到了我们想要的结果。但是这还没完。如下

class client

{

        public static void main(String[] args)

        {

          person p=new person("张三",0);

          p.speek();

person p1=new person("张三",10);

p1.speek();

p1.name=”无赖

p1.age=30

          p1.speek();

 

        }

}

运行结果:年龄从10突然变成30,名字也变成了无赖,你能接受吗,返正我不接受。哪有个名字呀,多难听呀。这是乍么办。

 

我们设计的类还是有问题的,怎么办呢?

思路为:利用关键字private修饰名字和年龄,使得外部不可以访问和修改。然后提供相应的访问接口,对调用者的行为进行约束。如下:

class person

{

          private String name=null;

          private int age=0;

          public void setName(String name)

          {

                if(!name.equals("无赖")&&!name.equals("下流")&&!name.equals("小三"))

                     this.name=name;

                else

                     System.out.println("不合法的名字");

          }

          public String getName()

          {

                return this.name;

          }

          public int getAge()

          {

                return this.age;

          }

          public person(String name,int age)

          {

                this.name=name;

                if(age>=0&&age<=130)

                {

                     this.age=age;

                }

                else

                {

                     System.out.println("给定的年龄不合法");

                }

          }

          public void speek()

          {

                if(age>0&&age<130)

                     System.out.println("我的名字是:"+getName()+"我的字年龄是:"+getAge());

                else if(age==0)

                     System.out.println("刚出生年领太小只会哭——啊啊啊啊啊啊啊啊啊啊啊啊啊啊");

                     

          }

}

class client

{

     public static void main(String[] args)

     {

          person p1=new person("张三",10);

          p1.speek();

          p1.setName("无赖");

          p1.speek();

 

     }

}

运行结果:修改了字,但不能是一些不好听的词,

代码七:给人取一个好听一点的名字:如下

     class client

{

     public static void main(String[] args)

     {

          person p1=new person("张三",10);

          p1.speek();

          p1.setName("胡萝卜");

          p1.speek();

 

     }

}

结果如下:

 

总结:面向对象特性——封装。其实就是对客观事物进行的数据隐藏,提供符合的公供方法,并对数据进行有效验证。保证了数据的有效性。提高代码的健壮性,复用性。简单说就封装就是为了提高程序代码的健壮性和代码的复用性。

原创粉丝点击