黑马程序员技术交流社区

标题: 封装问题 [打印本页]

作者: 徐卓    时间: 2013-7-11 16:45
标题: 封装问题
本帖最后由 徐卓 于 2013-7-11 20:29 编辑
  1. class GoodDogTestDrive
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 GoodDog one = new GoodDog();
  6.                 one.setSize(70);
  7.                 GoodDog two = new GoodDog();
  8.                 two.setSize(8);
  9.                 System.out.println("Dog one:"+ one.getSize());
  10.                 System.out.println("Dog two:"+two.getSize());
  11.                 one.bark();
  12.                 two.bark();
  13.         }
  14. }
  15. class GoodDog
  16. {
  17.         private int size;                //实例变量设定为私有
  18.         public int getSize()
  19.         {
  20.                 return size;
  21.         }
  22.         public void setSize (int s)
  23.         {
  24.                 size = s;
  25.         }
  26.         void bark () {
  27.         if (size>60)
  28.         {
  29.                 System.out.println("Wooof! Wooof!");
  30.         }else if (size >14)
  31.         {
  32.                 System.out.println("Ruff! Ruff!");
  33.         }else {
  34.         System.out.println("Yip! Yip!");
  35.         }
  36.         }
  37. }
复制代码
在第24行size = s,是把调入的值赋值给size,于第17行的私有size一样吗 ,求解
作者: 在乎..    时间: 2013-7-11 18:44
是一样的,都是数据成员名!
作者: 在乎..    时间: 2013-7-11 18:53
this是为了明确表示引用的是类的数据成员,而不是形参或局部变量,这是在当成员方法行的形参与数据成员名相同时候,或者成员方法的局部变量名可能出现混淆时应用的,你代码里面没有令到歧义的参数,因此是默认为类的数据成员的。但是当代码public void setSize (int s)
        {
             int size;
                this.size = s;  //就需加this表示本类的数据成员
        }
希望采纳。
作者: 龚首道    时间: 2013-7-11 19:58
本帖最后由 龚首道 于 2013-7-11 20:03 编辑

把()里的int s直接换成int size可以不?然后在代码块里用this.size=size;?public void setSize (int size)        
{                 
         this.size= size;
}

作者: 龚首道    时间: 2013-7-11 20:04
还有,你这里的if语句写的不是很好,有漏洞
作者: 徐卓    时间: 2013-7-11 20:25
在乎.. 发表于 2013-7-11 18:44
是一样的,都是数据成员名!

哦  谢谢
作者: 徐卓    时间: 2013-7-11 20:26
在乎.. 发表于 2013-7-11 18:53
this是为了明确表示引用的是类的数据成员,而不是形参或局部变量,这是在当成员方法行的形参与数据成员名相 ...

恩是的  可以用this解决,这个是抄的书上的一段代码
作者: 徐卓    时间: 2013-7-11 20:26
龚首道 发表于 2013-7-11 19:58
把()里的int s直接换成int size可以不?然后在代码块里用this.size=size;?public void setSize (int size ...

可以这样
作者: 徐卓    时间: 2013-7-11 20:26
龚首道 发表于 2013-7-11 20:04
还有,你这里的if语句写的不是很好,有漏洞

这个是书上的代码 ,我没有进行修改
作者: 在乎..    时间: 2013-7-11 20:40
龚首道 发表于 2013-7-11 19:58
把()里的int s直接换成int size可以不?然后在代码块里用this.size=size;?public void setSize (int size ...

public void setSize (int size) 这个size 只是一个形式参数,只要符合java参数的名字就行了,不必拘束的。
你这this.size=size; 一般都是这样定义的,少人写s 。
作者: 龚首道    时间: 2013-7-12 09:21
在乎.. 发表于 2013-7-11 20:40
public void setSize (int size) 这个size 只是一个形式参数,只要符合java参数的名字就行了,不必拘束的 ...

哦,明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2