A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 大牛1 中级黑马   /  2016-5-29 20:43  /  335 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

封装引入
  1. /*
  2.         定义一个学生类:
  3.                 成员变量:name,age
  4.                 成员方法:show()方法
  5.                
  6.         我们在使用这个案例的过程中,发现了一个问题:
  7.                 通过对象去给成员变量赋值,可以赋值一些非法的数据。
  8.                 这是不合理的。
  9.                 应该是这个样子的:在赋值之前,先对数据进行判断。
  10.                 判断到底在哪里做比较合适呢?
  11.                 StudentDemo类是一个测试类,测试类一般只创建对象,调用方法。       
  12.                 所以,这个判断应该定义在Student类中。
  13.                 而我们在成员变量的位置可不可以进行数据判断呢?
  14.                 是不可以的,因为做数据校验,必须要依靠一些逻辑语句。
  15.                 逻辑语句是应该定义在方法中的,所以,我们最终决定在Student类中提供一个方法
  16.                 来对数据进行校验。
  17.        
  18.         按照我们前面的分析,我们给出了一个方法进行校验。
  19.         但是呢,它偏偏不调用方法来赋值,还是直接赋值了,
  20.         这样我们的方法就没有起到作用。
  21.         我就应该要求你必须使用我的方法,而不能直接调用成员变量赋值。
  22.         怎么去强制要求不能直接使用成员变量呢?
  23.                 针对这种情况,Java就提供了一个关键字 private
  24.                
  25.         private:私有的。可以修饰成员变量和成员方法。
  26.                 注意:被private修饰的成员只能在本类中访问。
  27.                
  28.         其实我讲到现在讲解的是一个封装的思想。
  29.         封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
  30. */
  31. class Student {
  32.         //姓名
  33.         String name;
  34.         //年龄
  35.         private int age;
  36.        
  37.         //写一个方法对数据进行校验
  38.         /*
  39.                 返回值类型:void
  40.                 参数列表:int a
  41.         */
  42.         public void setAge(int a) {
  43.                 if(a < 0 || age > 120) {
  44.                         System.out.println("你给的年龄有问题");
  45.                 }else {
  46.                         age = a;
  47.                 }
  48.         }
  49.        
  50.        
  51.         //show()方法,显示所有成员变量值
  52.         public void show() {
  53.                 System.out.println("姓名:"+name);
  54.                 System.out.println("年龄:"+age);
  55.         }
  56. }

  57. class StudentDemo {
  58.         public static void main(String[] args) {
  59.                 //创建学生对象
  60.                 Student s = new Student();
  61.                 s.show();
  62.                 System.out.println("--------------");
  63.                
  64.                 //给成员变量赋值
  65.                 s.name = "林青霞";
  66.                 //s.age = 27;
  67.                 s.setAge(27);
  68.                 s.show();
  69.                 System.out.println("--------------");
  70.                
  71.                 //给age赋值
  72.                 //s.age = -27; //这个数据是不合理的
  73.                 //通过方法给值
  74.                 s.setAge(-27);
  75.                 s.show();
  76.                 System.out.println("--------------");
  77.         }
  78. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马