黑马程序员技术交流社区

标题: 关于类中函数的问题 [打印本页]

作者: 湛添友    时间: 2014-3-26 16:07
标题: 关于类中函数的问题
public class Eencapsulation{
    public static void main(String[] args){
person Z=new person();
Z.setAge(24);
Z.speak();

    }

}
class person
{
private int age;
public void setAge(int a)
{
if(a>0&&a<150)
{
age=a;
}
else
System.out.println("非法年龄");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println(age);
}

}

又转不过弯了,类中speak()
为什么没有参数传入,它能知道并打印age?
一般的函数必须要有参数传入

作者: Style栉    时间: 2014-3-26 16:18
这个方法的功能就是输出语句.当它被调用的时候就会执行里面的语句.至于参数的话.如果要输出这个参数.或是需要参数运算的话才传
作者: tcny    时间: 2014-3-26 16:18
在类创建对象时,类中私有成员变量age已经有值了,speak()方法打印的就是这个变量的值啊。用你的代码就是对象Z,Z调用的speak方法。
作者: optimisticpig    时间: 2014-3-26 16:19
因为speck方法只有打印输出语句,而本类中的成员方法可以访问成员变量age
作者: H-Deka    时间: 2014-3-26 16:25
因为类中已经有了age这个属性,类实力对象调用这个speck()方法时,就可以不用传参数就可以访问本身就有的属性
作者: 橸瑩膤漃寞林    时间: 2014-3-26 16:46
你不是已经创建了一个对象z了吗,这个对象一创建就有年龄24,然后Z.speak();你就往speak()这个方法里面传了z这个对象的年龄,它运行System.out.println(age);就给你打印下年龄。

作者: Mr.__ㄨīn    时间: 2014-3-26 16:53
aeg是成员变量。当你调用函数setAge(24),判断24满足条件,为age赋值为24,这个时候age已经有值了。但是如果你调用函数setAge()时,传入值不符合条件时,age是默认初始化时候的值0。
作者: 年轻的老头    时间: 2014-3-26 17:08
对象的成员属性在成员方法里是可见,所以成员方法speak()能直接对成员属性age访问,如果在成员方法里如果有与age同名局部age变量,在该方法内访问成员属性age必须加前缀this(即this.age)
作者: MVP    时间: 2014-3-26 17:28
Z.setAge(24)你在这里已经设置了成员变量age的值。你输出的话就可以直接使用类中的age,不需要另外传递参数。




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