转载 实现类的封装性

Posted 卡拉瓦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转载 实现类的封装性相关的知识,希望对你有一定的参考价值。

实现类的封装性

        为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。
一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。

private变量只能被内部类使用,不能被外部的类使用,有一种例外,如下:

  • 在一个类中定义了一个private成员变量age,然后产生了这个类的两个实例d1、d2,则在d1对象的方法中可以访问d2对象中的私有变量age,代码如下:
    class Person
    {
            private int age=-1;
             void aa(Person a)
             {
                      System.out.println(a.age);
             }
    }
    class bbc
    {
             public static void main(String[] args) 
             {
                      Person d1=new Person();
                      Person d2=new Person();
                      d1.aa(d2);   //在这里d1对象的aa方法中访问了d2对象中的私有变量age
              }
    }
  • 只有在方法内才能出现访问另一个对象的私有变量的语句,如下代码是错误的:
    class Person
    {
            private int age=-1;
             void aa(int age)
             {
                      System.out.println(age);
             }
    }
    class bbc
    {
             public static void main(String[] args) 
             {
                      Person d1=new Person();
                      Person d2=new Person();
                      d1.aa(d2.age);   //不是在方法内不能出现访问私有成员变量的语句,所以这里会报错
                      System.out.println(d2.age);   //这句也是错的
             }
    }

 

 

类的封装所带来的优点

    • 隐藏类的实现细节;
    • 让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
    • 便于修改,增强代码的可维护性;
    • 可进行数据检查
      例子:
      class Person
      {
              int  age ;
              void shout()
              {
                      System.out.println("您的年龄是:" + age)
              }
              pubic static void main(String args[ ])
              {
                      Person  p = new Person();
                      p.age = -30;    
                      p.shout();
              }
      }
      如果有人把年龄输入为负数,很明显是不对的,可以修改如下:
      class Person
      {
              private int  age ;
              public int setAge(int age)
              {
                      if(age<0)
                              return;
                      this.age = age ;
              }
              public int getAge()
              {
                      return age;
              }
              void shout()
              {
                      System.out.println("您的年龄是:" + age)
              }
              pubic static void main(String args[ ])
              {
                      Person  p = new Person();
                      p.setAge = -30;    
                      p.shout();
              }
      }
      经过这样的封装之后,负数的年龄将不会被赋值给age。还有两个数相除,除数不能为0也可用这方法
    • 转自:http://blog.csdn.net/dai_zhenliang/article/details/7496668

以上是关于转载 实现类的封装性的主要内容,如果未能解决你的问题,请参考以下文章

Java封装性及属性的封装

面向对象特征之封装性

增加类的封装性

2019-07-23 类的封装性

类的封装性和继承

面向对象-封装性